在C中释放NULL指针是一种好习惯吗?

rid*_*rid 70 c pointers memory-management

可能重复:
ptr为NULL的free(ptr)是否会损坏内存?

我正在编写一个C函数,如果它被malloc()编辑,它将释放一个指针.指针可以是NULL(在发生错误并且代码没有机会分配任何内容的情况下)或分配malloc().使用安全free(ptr);而不是if (ptr != NULL) free(ptr);

gcc即使有-Wall -Wextra -ansi -pedantic,也不会抱怨,但这是好的做法吗?

orl*_*rlp 140

引用ISO-IEC 9899的C标准7.20.3.2/2 :

void free(void *ptr);
Run Code Online (Sandbox Code Playgroud)

如果ptr是空指针,则不执行任何操作.

不要检查NULL,它只会增加更多的虚拟代码来阅读,因此是一种不好的做法.


但是,使用&co 时必须始终检查NULL指针malloc.在这种情况下NULL意味着出现了问题,很可能是没有可用的内存.

  • 这个StackOverflow链接的一些答案:http://stackoverflow.com/questions/1938735/does-freeptr-where-ptr-is-null-corrupt-memory提到某些C库忽略了这个标准,并抛出错误,尽管C标准说的是什么.可能值得一看. (3认同)

jam*_*lin 20

NULL在打电话之前不打扰检查是一种好习惯free.检查只会给代码增加不必要的混乱,并free(NULL)保证安全.从C99标准的第7.20.3.2/2节开始:

free函数导致ptr指向的空间被释放,即可用于进一步分配.如果ptr是空指针,则不执行任何操作.


Hel*_*o71 5

随机谷歌搜索http://linux.die.net/man/3/free,其中说明:

如果ptr为NULL,则不执行任何操作.