释放空指针

Vij*_*jay 36 c pointers

如果我们尝试释放指向NULL的指针,内存会发生什么?这有效吗?

为什么它不显示任何警告/错误消息?

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,则不执行任何操作.

  • 对于那些担心它是Linux扩展的人来说,这种行为是C90标准规定的. (12认同)

Pav*_*mar 6

释放空指针对执行没有影响.


edg*_*eis 5

我会去:

#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)

; - ||


Jon*_*ler 5

很久以前,有一个'free()'的实现在给空指针时崩溃了.这仅适用于C89(C90)标准之前的实现,该标准尚未经过修改以解决此问题.

根据我的经验,基本上没有任何实现(也不应该),所以现在可以安全地释放空指针.

如果你有任何要求移植到非常奇怪和古老的系统,那么也许你应该保持谨慎.另一方面,如果你有这样的系统需要担心,你可能知道这个问题(以及一大堆其他问题) - 或者在代码中有一些公共知识来表明这一点.