[英]c freeing malloc(0)
我在c中编写一个应用程序,我正在动态分配一些数组所需的内存。 我知道很多这些数组都需要零分配。 那么,当我打电话给他们时会有问题吗? 例如free(malloc(0 * sizeof(int)));
? 我知道我的应用程序在我的机器上编译并运行正常,但我可以依赖它吗? 干杯!
你可以安全地free(malloc(0))
。
来自man malloc
:
如果
size
为0
,则malloc()
返回NULL
或一个唯一的指针值,以后可以成功传递给free()
。
自由:
如果
ptr
为NULL
,则不执行任何操作
malloc(0)
may(这是实现定义的)返回一个空指针,或者每次调用它时都可以返回一个新指针。 在任何一种情况下,返回值都有效传递给free
,因为free(0)
无论如何都是no-op。 但是,由于检测和处理realloc
失败以及ISO C和POSIX之间的分歧存在一些令人讨厌的问题,我强烈建议您永远不要将大小0传递给malloc
或realloc
。 你总是可以简单地在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.