Очистка указателя NULL не может быть неудачной.И free
не возвращает никакой ошибки, но освобождение нераспределенной памяти, уже освобожденной памяти или середины выделенного блока является неопределенным поведением - это может вызвать ошибку памяти, и программа может прерваться (или, что еще хуже, испортит кучу)структура и сбой позже).
Или, что еще хуже, продолжайте работать, но полностью повредите ваши данные и запишите их на диск, не осознавая: -)
Соответствующая часть стандарта (C99) является секцией 7.20.3.2
:
#include <stdlib.h>
void free(void *ptr);
Функция free
вызывает освобождение пространства, на которое указывает ptr
,то есть сделано доступным для дальнейшего распределения.Если ptr
является нулевым указателем, никаких действий не происходит.В противном случае, если аргумент не совпадает с указателем, ранее возвращенным функцией calloc
, malloc
или realloc
, или если пространство было освобождено при вызове free
или realloc
, поведениеundefined.
Функция free
не возвращает значения.