Comprende el código de forma correcta antes de adaptarlo a tu proyecto si tquieres aportar algo puedes compartirlo con nosotros.
Solución:
Quiere modificar el valor de un int*
(su array) por lo que necesita pasar un puntero a su increase
función:
void increase(int** data)
*data = realloc(*data, 5 * sizeof int);
El código de llamada se vería así:
int *data = malloc(4 * sizeof *data);
/* do stuff with data */
increase(&data);
/* more stuff */
free(data);
Tenga en cuenta la diferencia entre un puntero y un array.
Un array hay un trozo de memoria en la pila, y eso es todo. Si tienes un array:
int arr[100];
Entonces arr es una dirección de memoria, pero también &arr es una dirección de memoria, y esa dirección de memoria es constante, no se almacena en ninguna ubicación. Por lo tanto, no puede decir arr=NULL, ya que arr no es una variable que apunte a algo. Es solo una dirección simbólica: la dirección de donde el array comienza. En cambio, un puntero tiene su propia memoria y puede apuntar a direcciones de memoria.
Basta que cambies de int[] a int*.
Además, las variables se pasan por copia, por lo que debe pasar un int** a la función.
Sobre cómo usar realloc, todos los ejemplos didácticos incluyen esto:
- Usar reasignación;
- Compruebe si es NULL. En este caso, use perror y salga del programa;
- Si no es NULL, use la memoria asignada;
- Libera la memoria cuando ya no la necesites.
Así que ese sería un buen ejemplo:
int* chuck= (int*) realloc (NULL, 10*sizeof(int)); // Acts like malloc,
// casting is optional but I'd suggest it for readability
assert(chuck);
for(unsigned int i=0; i<10; i++)
chunk[i]=i*10;
printf("%d",chunk[i]);
free(chunk);
Ambos códigos son muy problemáticos, si usa el mismo puntero para enviar y recibir desde realloc, si falla, perderá su puntero para liberarlo más tarde.
deberías hacer algo como esto:
... ...
more = realloc(area , size);
if( more == NULL )
free(area);
else
area=more;
... ...
Sección de Reseñas y Valoraciones
Si posees algún inconveniente o disposición de aclararse nuestro tutorial eres capaz de escribir una crónica y con placer lo ojearemos.