¿Como funciona exactamente realloc()?

Iniciado por marcoma, 17 Agosto 2015, 17:46 PM

0 Miembros y 2 Visitantes están viendo este tema.

marcoma

Me gustaría saber si realloc ademas de asignar los valores a la nueva dirección de memoria
se encarga de liberar la memoria ocupada anteriormente.

Gracias  :-X

Hogger

Hola,

Realloc() únicamente expande o contrae un bloque de memoria ya existente por lo que no libera la memoria ocupada anteriormente, i.e, expande/contrae un malloc()/calloc() anterior.

Los valores ya existentes en el bloque de memoria son preservados. Si se expande el bloque de memoria reservado, los valores del nuevo "pedazo" reservado son indeterminados.

http://www.cplusplus.com/reference/cstdlib/realloc/

Saludos.

Eternal Idol

#2
Si, siempre que realloc no retorne null ya libero la memoria pasada como primer parametro.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

marcoma

 en el enlace dice: The function may move the memory block to a new location
por tanto supongo que si que cambiara de dirección de memoria no? o lo hace solo al no poder re dimensionar desde esa dirección de memoria actual? ;D

Eternal Idol

Solo cambia la direccion cuando lo necesita pero tenes que guardar el retorno en una variable temporal y comprobar que no sea null, cuando no sea null ya podes asignarlo a la variable original sin problema (o sera igual o la memoria original estara liberada).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón