¿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>
davy.ai
El problema con el código está en la línea
*arrayOfInts[i - 1] = i;
, la cual está accediendo al valor dei
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.