2013-01-17 32 views
2

是不是這樣的?:使用malloc循環來保證malloc結果不好嗎?

FOO *foo; 
while (!(foo = malloc(sizeof(FOO)))) ; 
+0

爲什麼'malloc'突然成功,當它再次失敗後再試一次? –

+1

看起來很拗口。一方面,它期望malloc最終會成功。也許這是一個合理的期望,也許不是。 –

+0

也許吧。你可能會導致競賽狀況。也許限制它一定的時間,或者編寫你自己的malloc函數,它調用malloc並且只嘗試100次。 –

回答

4

我不知道不好的做法是不好的做法來分配內存,但它是罕見的。 malloc()失敗通常表示您的程序不太可能從中恢復的主要系統問題。如果你的系統不同,你的例子可能很實用。

注意 - 此答案假定sizeof(FOO)是「合理的」,並且您的malloc()不只是因爲您要求太多內存而拒絕。

1

這並不能保證malloc()的結果。如果malloc返回NULL,可能有一個原因(例如內存不足)。你可能會陷入無限循環。

此外,如果你是一個Linux平臺上運行此:

默認情況下,Linux遵循一個樂觀的內存分配策略。這意味着當malloc()返回非NULL時,不能保證內存真的可用。

這意味着可以說,一遍又一遍地調用malloc確實發生了返回非NULL的事情,由於Linux的「樂觀」策略,非NULL仍然不能保證你有任何工作。

我認爲這段代碼正在爲您設置一個調試噩夢。