Pra*_*rav 57
从C99第7.20.3.2节:自由功能
概要
1 #include <stdlib.h>
void free(void *ptr);
Run Code Online (Sandbox Code Playgroud)
描述
2 free函数导致ptr指向的空间被释放,即可用于进一步分配.如果ptr是空指针,则不执行任何操作.
Mar*_*n B 14
来自http://linux.die.net/man/3/malloc:
如果ptr为NULL,则不执行任何操作.
我会去:
#ifdef MY_DOUBTS_HAUNT_ME_IN_MY_DREAMS
#define safe_free(x) do { if ((x)) free((x)); } while(0)
#elseif /* feeling gutsy */
#define safe_free(x) free((x))
#endif
Run Code Online (Sandbox Code Playgroud)
; - ||
很久以前,有一个'free()'的实现在给空指针时崩溃了.这仅适用于C89(C90)标准之前的实现,该标准尚未经过修改以解决此问题.
根据我的经验,基本上没有任何实现(也不应该),所以现在可以安全地释放空指针.
如果你有任何要求移植到非常奇怪和古老的系统,那么也许你应该保持谨慎.另一方面,如果你有这样的系统需要担心,你可能知道这个问题(以及一大堆其他问题) - 或者在代码中有一些公共知识来表明这一点.