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