为什么我在这个程序的控制台中从来没有看到 Hello 文本?

Why I never see the Hello text in Console in this program?

这是我的代码,运行 OS X Yosemite

int main(int argc, char *argv[]){
    while (1) {
        srand(time(NULL));
        int r = rand();
        printf("Allocating\n");
        int *pi = malloc(5000000 * sizeof(int));
        if(pi==NULL){
            printf("Hello");
        }
        memset(pi, r, 5000000 * sizeof(int));
    }
}

所以这个程序最终会停止 运行,我在控制台中看到的最后一行是:

Allocating

Allocating

Allocating

Killed: 9

Korays-MacBook-Pro:hello2 koraytugay$

如果malloc在这种情况下不return NULL,它什么时候会做?我的理解是内存分配问题发生在这里,但为什么 "Hello" 没有打印出来?

我怀疑 printf 排队 "Hello" 用于输出,然后您尝试使用空指针进行 memset,并且在处理排队 "Hello" 之前进程被杀死。您可以尝试在 Hello (fflush) 之后刷新标准输出。

Linux 如果您的内存需求超过可用内存,则程序将终止程序,使 malloc 永远不会 return NULL。

您可以使用 echo 2 > /proc/sys/vm/overcommit_memory.

关闭此功能