为什么我在这个程序的控制台中从来没有看到 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.
关闭此功能
这是我的代码,运行 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.
关闭此功能