Después de ptr1 = realloc(ptr2, 3 * sizeof(int));
ptr2 no es válido y no debe ser usado. Solo debe liberar ptr1
. En algunos casos el valor de retorno de realloc
será el mismo valor que aprobó.
Se puede considerar segura ptr1=realloc(ptr2, ...
como equivalente a esto:
ptr1 = malloc(...);
memcpy(ptr1, ptr2, ...);
free(ptr2);
Esto es lo que ocurre en la mayoría de los casos, a menos que el nuevo tamaño todavía cabe en el bloque de memoria de edad - a continuación, realloc podría devolver el bloque de memoria original.
Al igual que otras funciones de asignación, realloc
devuelve NULL si falla, es posible que desee comprobarlo.
"ptr2 es válido y no se debe utilizar" - a no ser que se devuelve un puntero nulo, en cuyo caso ptr2 sigue siendo válido y todavía necesita liberar con el tiempo. Entonces, en el código equivalente, las líneas segunda y tercera son solo 'if (ptr1)'. –