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

问题描述 投票:71回答:4

可能重复: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都没有抱怨,但这是很好的做法吗?

c pointers memory-management
4个回答
142
投票

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

void free(void *ptr);

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

不要检查NULL,它只会添加更多的伪代码以供读取,因此是一种不好的做法。


但是,在使用NULL&co时,您必须始终检查malloc指针。在这种情况下,NULL表示出现问题,最有可能是没有可用的内存。


20
投票

优良作法是在调用NULL之前不要费心检查free。检查只会给您的代码增加不必要的混乱,并且保证free(NULL)是安全的。从C99标准的7.20.3.2/2部分开始:

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


5
投票

请参见http://linux.die.net/man/3/free,其中指出:

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


4
投票

我认为,不,至少在您的情况下不。

如果无法分配内存,则应在调用free之前检查WAY。

© www.soinside.com 2019 - 2024. All rights reserved.