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 的替代品。