簡體   English   中英

c釋放malloc(0)

[英]c freeing malloc(0)

我在c中編寫一個應用程序,我正在動態分配一些數組所需的內存。 我知道很多這些數組都需要零分配。 那么,當我打電話給他們時會有問題嗎? 例如free(malloc(0 * sizeof(int))); 我知道我的應用程序在我的機器上編譯並運行正常,但我可以依賴它嗎? 干杯!

你可以安全地free(malloc(0))

來自man malloc

如果size0 ,則malloc()返回NULL或一個唯一的指針值,以后可以成功傳遞給free()

自由:

如果ptrNULL ,則不執行任何操作

malloc(0) may(這是實現定義的)返回一個空指針,或者每次調用它時都可以返回一個新指針。 在任何一種情況下,返回值都有效傳遞給free ,因為free(0)無論如何都是no-op。 但是,由於檢測和處理realloc失敗以及ISO C和POSIX之間的分歧存在一些令人討厭的問題,我強烈建議您永遠不要將大小0傳遞給mallocrealloc 你總是可以簡單地在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM