我得到了一個採訪問題,當我們在無限循環內使用malloc()
分配大塊內存時,會發生什麼情況,而不是free()
它。infinite循環內的malloc()
我想檢查條件與NULL
應該工作時,沒有足夠的內存堆,它應該打破循環,但它沒有發生和程序異常終止打印killed
。
爲什麼會發生這種情況,爲什麼它不執行if
部分時沒有內存分配(我的意思是當malloc()失敗)?這是什麼行爲?
我的代碼是:
#include<stdio.h>
#include<stdlib.h>
int main(void) {
int *px;
while(1)
{
px = malloc(sizeof(int)*1024*1024);
if (px == NULL)
{
printf("Heap Full .. Cannot allocate memory \n");
break;
}
else
printf("Allocated \t");
}
return 0;
}
編輯:GCC - 4.5.2(Linux的Ubuntu的-11.04)
我認爲這是一個系統保護機制,它在需要內存時可以殺死內存最大的進程 – ShinTakezou
http://stackoverflow.com/questions/2798330/maximum-memory-which-malloc-can -allocate – koopajah
的[文檔的malloc(http://www.cplusplus.com/reference/cstdlib/malloc/)說,這將返回null如果函數無法分配請求的內存,但它並沒有說什麼關於這可能發生的條件。 –