c-为什么我在这个程序中从未在控制台中看到Hello文本



这是我的代码,运行在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。

相关内容

  • 没有找到相关文章

最新更新