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

时间:2011-05-21 20:18:59

标签: c pointers memory-management

  

可能重复:
  Does free(ptr) where ptr is NULL corrupt memory?

我正在编写一个C函数,如果它是malloc(),则释放指针。指针可以是NULL(如果发生错误并且代码没有机会分配任何内容)或者使用malloc()分配。使用free(ptr);代替if (ptr != NULL) free(ptr);安全吗?

gcc根本没有抱怨,即使是-Wall -Wextra -ansi -pedantic,但这是不错的做法?

4 个答案:

答案 0 :(得分:132)

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

void free(void *ptr);
  

如果ptr是空指针,则不会发生任何操作。

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


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

答案 1 :(得分:19)

在调用NULL之前,最好不要费心检查free。检查只会给代码增加不必要的混乱,free(NULL)保证安全。从C99标准的第7.20.3.2/2节开始:

  

free函数导致ptr指向的空间被释放,即被释放   可供进一步分配。如果ptr是空指针,则不会发生任何操作。

答案 2 :(得分:5)

随机google搜索显示http://linux.die.net/man/3/free,其中说明:

  

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

答案 3 :(得分:4)

在我看来,不,至少不是你的情况。

如果你无法分配内存,你应该在免费电话之前检查一下。