¿Es una buena práctica liberar un puntero NULL en C?

Posible duplicado:
¿Libera (ptr) donde ptr es memoria corrupta NULL?

Estoy escribiendo una función C que libera un puntero si era malloc() ed. El puntero puede ser NULL (en el caso de que se haya producido un error y el código no haya tenido la posibilidad de asignar nada) o asignado con malloc() . ¿Es seguro usar free(ptr); en lugar de if (ptr != NULL) free(ptr); ?

gcc no se queja en absoluto, incluso con -Wall -Wextra -ansi -pedantic , pero ¿es una buena práctica?

Citando el estándar C, 7.20.3.2/2 de ISO-IEC 9899 :

 void free(void *ptr); 

Si ptr es un puntero nulo, no se produce ninguna acción.

No verifique NULL , solo agrega más código ficticio para leer y, por lo tanto, es una mala práctica.


Sin embargo, siempre debe verificar si hay punteros NULL al usar malloc & co. En ese caso, NULL significa que algo salió mal, lo más probable es que no haya memoria disponible.

Es una buena práctica no molestarse en buscar NULL antes de llamar free . La comprobación solo agrega desorden innecesario a su código, y se garantiza que free(NULL) sea ​​seguro. De la sección 7.20.3.2/2 del estándar C99:

La función gratuita hace que el espacio apuntado por ptr sea desasignado, es decir, que esté disponible para una asignación posterior. Si ptr es un puntero nulo, no se produce ninguna acción.

Al azar en google aparece http://linux.die.net/man/3/free que dice:

Si ptr es NULL, no se realiza ninguna operación.

En mi opinión, no, al menos no en tu caso.

Si no pudo asignar memoria, debería haber verificado ese CAMINO antes de la llamada de forma gratuita.