Is it good practice to free a NULL pointer in C?
Quoting the C standard, 7.20.3.2/2 from ISO-IEC 9899:
void free(void *ptr);
If
ptr
is a null pointer, no action occurs.
Don't check for NULL
, it only adds more dummy code to read and is thus a bad practice.
However, you must always check for NULL
pointers when using malloc
& co. In that case NULL
mean that something went wrong, most likely that no memory was available.
It is good practice to not bother checking for NULL
before calling free
. Checking just adds unnecessary clutter to your code, and free(NULL)
is guaranteed to be safe. From section 7.20.3.2/2 of the C99 standard:
The
free
function causes the space pointed to byptr
to be deallocated, that is, made available for further allocation. Ifptr
is a null pointer, no action occurs.
As noted in the comments, some people sometimes wonder if checking for NULL
is more efficient than making a possibly unnecessary function call. However, this:
- Is a premature micro-optimization.
- Shouldn't matter. Checking for
NULL
first even might be a pessimization. For example, if 99% of the time your pointers aren'tNULL
, then there would be a redundantNULL
check 99% of the time to avoid an extra function call 1% of the time.
See http://linux.die.net/man/3/free which states:
If ptr is NULL, no operation is performed.