Saltar al contenido

Cómo usar realloc en una función en C

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:

  1. Usar reasignación;
  2. Compruebe si es NULL. En este caso, use perror y salga del programa;
  3. Si no es NULL, use la memoria asignada;
  4. 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *