Pregunta simple sobre la función realloc en C: Si uso realloc para reducir el bloque de memoria al que apunta un puntero, ¿se libera la memoria "extra"? ¿O necesita ser liberado manualmente de alguna manera?Uso de realloc para reducir la memoria asignada
Por ejemplo, si hago
int *myPointer = malloc(100*sizeof(int));
myPointer = realloc(myPointer,50*sizeof(int));
free(myPointer);
Voy a tener una pérdida de memoria?
Estrictamente hablando hay una pérdida de memoria, ya que no registra el resultado de 'realloc' y por lo tanto no puede liberarlo. Pero como indica la respuesta de R .., puede haber tenido suerte en un detalle de implementación. –
Vaya, tienes razón. Intenté corregirlo ¿Que tal ahora? –
El nuevo código todavía pierde la asignación original si falla el 'realloc'. Espero que la mayoría de las implementaciones no dejen de reducir un bloque, pero está permitido. La forma correcta de llamar a realloc, ya sea creciendo o reduciendo el bloque, es 'void * tmp = realloc (myPointer, 50 * sizeof (int)); if (! tmp) {/ * manejar el error de alguna manera. myPointer aún apunta al bloque anterior, que todavía está asignado * /} myPointer = tmp; '. –