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