这是我的代码,运行在OS X Yosemite上
int main(int argc, char *argv[]){
while (1) {
srand(time(NULL));
int r = rand();
printf("Allocatingn");
int *pi = malloc(5000000 * sizeof(int));
if(pi==NULL){
printf("Hello");
}
memset(pi, r, 5000000 * sizeof(int));
}
}
所以这个程序最终停止运行,控制台中的最后一行我看到的是:
分配
分配
分配
死亡:9
Korays MacBook Pro:hello2 koraytugay$
如果malloc在这种情况下不返回NULL,它什么时候返回?我的理解是内存分配问题发生在这里,但为什么"你好"没有打印出来?
Linux将在内存需求超过可用内存的情况下终止程序,使malloc永远不会返回NULL。
您可以使用echo 2>/proc/sys/vm/overcommit_memory关闭此功能。
我怀疑printf将"Hello"列为输出队列,然后您尝试使用空指针进行memset,进程在处理排队的"Hello)之前被终止。您可以尝试在Hello(fflush)之后刷新stdout。