繁体   English   中英

c释放malloc(0)

[英]c freeing malloc(0)

我在c中编写一个应用程序,我正在动态分配一些数组所需的内存。 我知道很多这些数组都需要零分配。 那么,当我打电话给他们时会有问题吗? 例如free(malloc(0 * sizeof(int))); 我知道我的应用程序在我的机器上编译并运行正常,但我可以依赖它吗? 干杯!

你可以安全地free(malloc(0))

来自man malloc

如果size0 ,则malloc()返回NULL或一个唯一的指针值,以后可以成功传递给free()

自由:

如果ptrNULL ,则不执行任何操作

malloc(0) may(这是实现定义的)返回一个空指针,或者每次调用它时都可以返回一个新指针。 在任何一种情况下,返回值都有效传递给free ,因为free(0)无论如何都是no-op。 但是,由于检测和处理realloc失败以及ISO C和POSIX之间的分歧存在一些令人讨厌的问题,我强烈建议您永远不要将大小0传递给mallocrealloc 你总是可以简单地在malloc参数的末尾添加+1|1 ,然后每次调用它时你肯定会得到一个唯一的指针(不同于空指针或任何其他对象的地址)。

不使用malloc(0)另一个原因是你必须始终检查malloc的返回值以检测失败,而malloc(0)可以在成功时返回空指针。 这使得您的所有错误检查代码更加复杂,因为您必须特殊情况下size参数为0的非错误情况。

malloc (一次)的结果free调用总是合法的。

是的, free(malloc(0))保证可以正常工作。

有关进一步的讨论,请参阅malloc(0)中的重点是什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM