在C中释放一个NULL指针是不是很好的做法?
可能重复:
免费(ptr)其中ptr是NULL损坏的内存?
我正在写一个C函数释放一个指针,如果它是malloc()
编辑。 指针可以是NULL(在发生错误的情况下,代码没有机会分配任何东西)或分配malloc()
。 使用free(ptr);
是安全的吗free(ptr);
而不是if (ptr != NULL) free(ptr);
?
-Wall -Wextra -ansi -pedantic
不会抱怨,即使有 – -Wall -Wextra -ansi -pedantic
,但它是好的做法?
引用C标准,来自ISO-IEC 9899的 7.20.3.2/2:
void free(void *ptr);
如果
ptr
是空指针,则不会发生任何操作。
不要检查NULL
,它只会添加更多的虚拟代码来读取,因此是不好的做法。
但是,使用malloc
&co时,必须始终检查NULL
指针。 在这种情况下, NULL
意味着出了问题,最有可能的是没有内存可用。
在free
调用之前,不要打扰检查NULL
。 检查只是给你的代码添加了不必要的混乱, free(NULL)
保证是安全的。 从C99标准的第7.20.3.2/2节:
自由函数使ptr指向的空间被释放,也就是说,可用于进一步的分配。 如果ptr是空指针,则不会发生任何操作。
随机googling变成http://linux.die.net/man/3/free其中指出:;
如果ptr为NULL,则不执行任何操作。
在我看来,不,至less不是你的情况。
如果你不能分配内存,你应该在免费的通话之前检查一下。