インタビューで質問がありました。無限ループ内で大量のメモリを割り当てるとどうなりmalloc()
ますか?free()
ヒープに十分なメモリがなく、ループを壊す必要がある場合に動作するはずの状態をチェックすることを考え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)