在下面的代码中,我在 while 循环中放置了一个 malloc 调用
int main()
{
int *ptr;
while(1) {
ptr=malloc(1000);
if (ptr == NULL) break;
}
return (0);
}
会while loop
一直运行直到堆中有剩余空间,还是会继续永远运行,除非它被杀死,因为我们没有在分配的内存中写入任何数据?当然存在内存泄漏,以便可以回答上述问题。
经过一定的迭代malloc
就会失败。由于您不检查 malloc 的返回值,因此没有什么可以打破循环。
所以它会无限循环。
随着你的休息,它最终会在 malloc 返回 NULL 时跳出循环。正如您已经提到的,存在内存泄漏。通常,一旦程序退出,操作系统将要求所有内存。虽然,这是一个很好的做法free
。
进程最终会达到一个限制(进程限制、用户限制、磁盘限制)然后优雅地死掉。它可能会破坏您的硬盘,并且系统的其余部分将在相当长的一段时间内停止运行。
如果您使用内存,操作系统不会给出无花果。
它最终会恢复。但是为什么要做这么愚蠢的事情呢?