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