在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不是你的情况。

如果你不能分配内存,你应该在免费的通话之前检查一下。