Possible Duplicate:
Does free(ptr) where ptr is NULL corrupt memory?

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

gcc一点也不抱怨,即使是-Wall -Wextra -ansi -pedantic,但这是个好习惯吗?

推荐答案

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

void free(void *ptr);

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

不要判断NULL,它只会增加更多要读取的伪代码,因此是一种糟糕的做法.


但是,在使用malloc&;时,必须判断NULL个指针;在这种情况下,NULL表示出现了问题,很可能是没有可用的内存.

C++相关问答推荐

在C、Linux中同步进程

C中的整字母后缀i是什么

设计处理各种数据类型的方法和数据 struct

C中空终止符后面的数字?

如何在C宏中确定Windows主目录?

为什么GCC可以调用未定义的函数?

无法用C++编译我的单元测试

不会停在空格或换行符上的错误

在基本OpenGL纹理四边形中的一个三角形中进行渲染

从uint8_t*转换为char*可接受

如何在GET_STRING输入后对少数几个特定字符串进行C判断?

从C文件中删除注释

无法访问共享目标文件内的共享指针

将 struct 数组写入二进制文件时发生Valgrind错误

C23标准是否向后兼容?

如何在不更改格式说明符的情况下同时支持双精度和长双精度?

程序对大输入给出错误答案

可以对两种 struct 类型中的任何一种进行操作的C函数

使用复合文字数组初始化的指针数组

如何向 execl 创建的后台程序提供输入?