我有一个面试问题,当我们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)