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
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/ (http://www.cplusplus.com/reference/cstdlib/realloc/)
Saludos.
Si, siempre que realloc no retorne null ya libero la memoria pasada como primer parametro.
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
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).