在一堆程序我遇到有關動態內存分配來我總能找到相同的代碼我喜歡當它是需要動態分配內存空間:malloc的返回值,而條件
int *pointer = (int *)malloc(sizeof(int));
if(pointer == NULL)
exit(1); // or return 1
// else the program keep running
我想知道爲什麼它是不使用,或者至少我從來沒有見過它,這樣的事情:
int *pointer
while((pointer = (int *)malloc(sizeof(int)) == NULL);
我雖然它和我想出的唯一的事情是,如果你不能分配新的內存,因爲有沒有更多的留在堆上,所以第二個例子會變成無限循環。是對的嗎?因爲如果內存分配由於某些其他原因而失敗(我真的不知道是哪一個),那麼比將內存分配放入循環中可能會解決問題。
我錯過了什麼嗎?哪一個「風格」是首選?
The第二個例子在失敗時確實會變成一個無限循環,而第一個例子會立即退出......是否有一個原因,您更喜歡無限循環到達直接退出?我並不完全確定我理解你的問題...... –
這是否有可能在多線程程序中運行?如果是這樣,可以想象線程1可能無法分配,因爲線程2已經佔用了所有空間。如果線程2隨後釋放它分配的一些空間,那麼線程1可能能夠獲得如此釋放的一些內存 - 然後可能指向重試malloc,可能在嘗試之間存在某種暫停,而不是全速敲擊分配器。否則(單線程程序),重試沒有意義。 –