我正在编写一个C函数,如果它是malloc()
,则释放指针。指针可以是NULL(如果发生错误并且代码没有机会分配任何内容)或者使用malloc()
分配。使用free(ptr);
代替if (ptr != NULL) free(ptr);
安全吗?
gcc
根本没有抱怨,即使是-Wall -Wextra -ansi -pedantic
,但这是不错的做法?
答案 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)
在我看来,不,至少不是你的情况。
如果你无法分配内存,你应该在免费电话之前检查一下。