es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo acceder correctamente a este array realocado?

En el siguiente código estoy tratando de crear un arreglo de enteros al que se puede acceder desde la función main(), sin embargo, Address-sanitizer me está dando un error de desbordamiento de buffer de pila y no puedo entender qué estoy haciendo mal. ¿Qué me estoy perdiendo?

“`cpp
#include <stdlib.h>

void reallocFail(int *arrayOfInts) {
*arrayOfInts = (int *)malloc(sizeof(int));
for (int i = 1; i <= 10; i++) {
*arrayOfInts = (int *)realloc(arrayOfInts, (i) * sizeof(int));
*arrayOfInts[i – 1] = i;
}
}

int main(void) {
int *arrayOfInts;
reallocFail(&arrayOfInts);
return 0;
}
“`</stdlib.h>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código está en la línea *arrayOfInts[i - 1] = i;, la cual está accediendo al valor de i como un índice del puntero al arreglo. Esto es incorrecto, ya que debería escribirse como (*arrayOfInts)[i - 1] = i;. Los paréntesis son necesarios, ya que el operador de desreferencia * tiene mayor precedencia que el operador de subíndice []. Este error causa que el programa sobrescriba memoria más allá del búfer asignado, lo que lleva al error de desbordamiento del búfer de pila.

Comments are closed.