Liberar memoria más de una vez puede tener consecuencias negativas. Puede ejecutar esta pieza de código para ver qué puede pasar con su computadora.
#include <stdio.h> /* printf, scanf, NULL */
#include <stdlib.h> /* malloc, free, rand */
int main()
{
int i,n;
char * buffer;
printf ("How long do you want the string? ");
scanf ("%d", &i);
buffer = (char*) malloc (i+1);
if (buffer==NULL) exit (1);
for (n=0; n<i; n++)
buffer[n]=rand()%26+'a';
buffer[i]='\0';
printf ("Random string: %s\n",buffer);
free (buffer);
free (buffer);
return 0;
}
Muchas bibliotecas estándar como CSparse utilizan una función de contenedor que se encarga de los problemas de memoria. copié la función aquí:
/* wrapper for free */
void *cs_free (void *p)
{
if (p) free (p) ; /* free p if it is not already NULL */
return (NULL) ; /* return NULL to simplify the use of
}
Esta función puede manejar los problemas con la memoria. Tenga en cuenta que debe tener en cuenta la condición de que malloc devuelve NULL en algunos casos
No se libera memoria cuando libera un puntero nulo. Si libera un puntero * no nulo * dos veces, la memoria se libera dos veces, y eso es un problema. – jalf