[英]c freeing malloc(0)
我在c中編寫一個應用程序,我正在動態分配一些數組所需的內存。 我知道很多這些數組都需要零分配。 那么,當我打電話給他們時會有問題嗎? 例如free(malloc(0 * sizeof(int)));
? 我知道我的應用程序在我的機器上編譯並運行正常,但我可以依賴它嗎? 干杯!
你可以安全地free(malloc(0))
。
來自man malloc
:
如果
size
為0
,則malloc()
返回NULL
或一個唯一的指針值,以后可以成功傳遞給free()
。
自由:
如果
ptr
為NULL
,則不執行任何操作
malloc(0)
may(這是實現定義的)返回一個空指針,或者每次調用它時都可以返回一個新指針。 在任何一種情況下,返回值都有效傳遞給free
,因為free(0)
無論如何都是no-op。 但是,由於檢測和處理realloc
失敗以及ISO C和POSIX之間的分歧存在一些令人討厭的問題,我強烈建議您永遠不要將大小0傳遞給malloc
或realloc
。 你總是可以簡單地在malloc
參數的末尾添加+1
或|1
,然后每次調用它時你肯定會得到一個唯一的指針(不同於空指針或任何其他對象的地址)。
不使用malloc(0)
另一個原因是你必須始終檢查malloc
的返回值以檢測失敗,而malloc(0)
可以在成功時返回空指針。 這使得您的所有錯誤檢查代碼更加復雜,因為您必須特殊情況下size參數為0的非錯誤情況。
對malloc
(一次)的結果free
調用總是合法的。
是的, free(malloc(0))
保證可以正常工作。
有關進一步的討論,請參閱malloc(0)中的重點是什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.