¿Alguien puede resumir cuál es el uso correcto de realloc()
?¿Cuál es el uso correcto de realloc() cuando falla y devuelve NULL?
¿Qué hace cuando realloc()
falla?
Por lo que he visto hasta ahora, parece que si realloc()
falla, tiene que free()
puntero antiguo. ¿Es eso cierto?
Aquí se muestra un ejemplo:
1. char *ptr = malloc(sizeof(*ptr) * 50);
2. ...
3. char *new_ptr = realloc(ptr, sizeof(*new_ptr) * 60);
4. if (!new_ptr) {
5. free(ptr);
6. return NULL;
7. }
Supongamos realloc()
falla en la línea 3
. ¿Estoy haciendo lo correcto en la línea 5
por free()
ing ptr
?
Lo que tienes allí se ve bien, siempre y cuando hayas comprobado que el malloc original fue exitoso. –
En realidad, incluso si el 'malloc()' original falla, 'realloc()' está bien con un puntero nulo para su primer argumento - entonces se comporta como 'malloc()', y presumiblemente (en este contexto) también fallará (porque si 'malloc()' no puede asignar 50 bytes, 'realloc()' probablemente tampoco puede asignar 60). –