【发布时间】:2015-06-19 05:25:34
【问题描述】:
这是我的代码,在 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));
}
}
所以这个程序最终停止运行,我看到控制台中的最后一行是:
分配
分配
分配
杀死:9
Korays-MacBook-Pro:hello2 koraytugay$
如果 malloc 在这种情况下不返回 NULL,它会在什么时候返回呢?我的理解是这里发生了内存分配问题,但是为什么没有打印“Hello”呢?
【问题讨论】:
-
printf()被缓冲;并非所有输出都会立即写入。在printf()调用之后,您立即尝试将大量数据写入NULL- 我想程序在没有尝试刷新输出的情况下崩溃。 -
@PaulRoub 让我试试。
-
你不应该在查看之后再次调用 memset,并在 printf 之后的 if 语句中放置一个“break”。
-
@OldProgrammer 为什么不这样做,为什么?
-
当你使用它时......你没有使用 rand() 做任何事情,但在你这样做之前,将 srand() 放在循环之外。
标签: c malloc osx-yosemite memset