realloc(ptr 0)不等于 free(ptr)

realloc概念上等同于另一个指针上的 malloc + memcpy + free

如果请求的空间大小为零,则 realloc 的行为是实现定义的。对于接收 sizesize 参数的所有内存分配函数,这类似。这样的函数实际上可能返回一个非空指针,但绝不能取消引用。

因此,realloc(ptr,0) 并不等同于 free(ptr)。有可能

  • 是一个懒惰的实现,只需返回 ptr
  • free(ptr),分配一个虚拟元素并返回它
  • free(ptr) 和返回 0
  • 只是为了失败而返回 0 而不做任何其他事情。

因此,特别是后两种情况无法通过应用程序代码区分。

这意味着 realloc(ptr,0) 可能不会真正释放/释放内存,因此它永远不能用作 free 的替代品。