realloc(ptr 0)不等于 free(ptr)
realloc
在概念上等同于另一个指针上的 malloc + memcpy + free
。
如果请求的空间大小为零,则 realloc
的行为是实现定义的。对于接收 size
的 size
参数的所有内存分配函数,这类似。这样的函数实际上可能返回一个非空指针,但绝不能取消引用。
因此,realloc(ptr,0)
并不等同于 free(ptr)
。有可能
- 是一个懒惰的实现,只需返回
ptr
free(ptr)
,分配一个虚拟元素并返回它free(ptr)
和返回0
- 只是为了失败而返回
0
而不做任何其他事情。
因此,特别是后两种情况无法通过应用程序代码区分。
这意味着 realloc(ptr,0)
可能不会真正释放/释放内存,因此它永远不能用作 free
的替代品。