malloc在一个while循环中

时间:2012-10-26 17:16:03

标签: c unix malloc

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

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

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

2 个答案:

答案 0 :(得分:2)

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

所以它会无限循环。


随着你的休息,当malloc返回NULL时,它最终会脱离循环。正如您已经提到的,存在内存泄漏。通常,一旦程序退出,OS将声明所有内存。虽然,free它是一个很好的做法。

答案 1 :(得分:0)

该过程最终将达到限制(进程限制,用户限制,磁盘限制),然后优雅地消亡。它可能会颠覆你的硬盘,系统的其余部分会在很长一段时间内停止运转。

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

它最终会恢复。但为什么这么蠢呢?