【发布时间】:2012-12-17 19:45:20
【问题描述】:
我有一个面试问题,当我们在无限循环中使用malloc() 分配大块内存而不是free() 它时会发生什么。
我想用NULL检查条件应该在堆上没有足够的内存并且应该打破循环时工作,但是它没有发生并且程序通过打印killed异常终止。
为什么会发生这种情况以及为什么在没有内存要分配时(我的意思是 malloc() 失败时)不执行 if 部分?这是什么行为?
我的代码是:
#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)
【问题讨论】:
-
我认为这是一种系统保护机制,当它需要内存时,它会杀死最消耗内存的进程
-
documentation for malloc 表示如果函数未能分配请求的内存,它将返回 null,但它没有说明可能发生这种情况的条件。
-
@koopajah : 感谢这个链接.. 我之前找不到那个
-
通常程序被限制在整个系统崩溃之前吃掉内存,因为一个内存猪。