Это хорошая практика, чтобы освободить нулевой указатель в C? [дубликат]
Возможные Дубликаты:
делает ли free (ptr), где ptr является нулевой поврежденной памятью?
Я пишу функцию C, которая освобождает указатель, если он был malloc()ed. Указатель может быть либо нулевым (в случае, если произошла ошибка и код не получил возможности выделить что-либо), либо выделенным с помощью malloc(). Это безопасно использовать free(ptr); вместо if (ptr != NULL) free(ptr);?
gcc не жалуется вообще, даже с -Wall -Wextra -ansi -pedantic, но это хорошая практика?
4 ответа:
цитируя стандарт C, 7.20.3.2 / 2 от ISO-IEC 9899:
void free(void *ptr);если
ptrявляется нулевым указателем, никаких действий не происходит.не проверять
NULL, это только добавляет больше фиктивного кода для чтения и, таким образом, плохая практика.
однако, вы должны всегда проверить
NULLуказатели при использованииmalloc& co. В таком случаеNULLозначает, что что-то пошло не так, скорее всего, что нет памяти доступный.
это хорошая практика, чтобы не беспокоиться о проверке
NULLперед вызовомfree. Проверка просто добавляет ненужный беспорядок в ваш код, иfree(NULL)гарантированно безопасно. Из раздела 7.20.3.2 / 2 стандарта C99:свободная функция приводит к тому, что пространство, на которое указывает ptr, освобождается, то есть делается доступно для дальнейшего распределения. Если ptr является нулевым указателем, никаких действий не происходит.
случайно googling появляетсяhttp://linux.die.net/man/3/free который гласит:
Если ptr имеет значение NULL, операция не выполняется.