我正在编写一个C函数,如果它被malloc()
处理,则释放一个指针。指针可以为NULL(在发生错误且代码没有机会分配任何内容的情况下)或使用malloc()
进行分配。使用free(ptr);
代替if (ptr != NULL) free(ptr);
是否安全?
[gcc
甚至没有-Wall -Wextra -ansi -pedantic
都没有抱怨,但这是很好的做法吗?
引用C标准,ISO-IEC 9899中的7.20.3.2/2:
void free(void *ptr);
如果
ptr
为空指针,则不会发生任何动作。
不要检查NULL
,它只会添加更多的伪代码以供读取,因此是一种不好的做法。
但是,在使用NULL
&co时,您必须始终检查malloc
指针。在这种情况下,NULL
表示出现问题,最有可能是没有可用的内存。
优良作法是在调用NULL
之前不要费心检查free
。检查只会给您的代码增加不必要的混乱,并且保证free(NULL)
是安全的。从C99标准的7.20.3.2/2部分开始:
free函数使ptr指向的空间被释放,即可用于进一步分配。如果ptr是空指针,则不会发生任何操作。
请参见http://linux.die.net/man/3/free,其中指出:
如果ptr为NULL,则不执行任何操作。
我认为,不,至少在您的情况下不。
如果无法分配内存,则应在调用free之前检查WAY。