0

在下面的代码中,我在 while 循环中放置了一个 malloc 调用

int main()
{
    int *ptr;
    while(1) { 
        ptr=malloc(1000);
        if (ptr == NULL) break;
    }
    return (0);
}

while loop一直运行直到堆中有剩余空间,还是会继续永远运行,除非它被杀死,因为我们没有在分配的内存中写入任何数据?当然存在内存泄漏,以便可以回答上述问题。

4

2 回答 2

2

经过一定的迭代malloc就会失败。由于您不检查 malloc 的返回值,因此没有什么可以打破循环。

所以它会无限循环。


随着你的休息,它最终会在 malloc 返回 NULL 时跳出循环。正如您已经提到的,存在内存泄漏。通常,一旦程序退出,操作系统将要求所有内存。虽然,这是一个很好的做法free

于 2012-10-26T17:19:12.747 回答
0

进程最终会达到一个限制(进程限制、用户限制、磁盘限制)然后优雅地死掉。它可能会破坏您的硬盘,并且系统的其余部分将在相当长的一段时间内停止运行。

如果您使用内存,操作系统不会给出无花果。

它最终会恢复。但是为什么要做这么愚蠢的事情呢?

于 2012-10-26T17:38:09.000 回答