【发布时间】:2015-04-13 16:32:16
【问题描述】:
这来自本书:Understanding and Using C Pointers
如果内存被重复分配然后丢失,那么程序 当需要更多内存但 malloc 无法分配它时可能会终止 因为它内存不足。在极端情况下,操作系统 可能会崩溃。下面的简单示例对此进行了说明:
char *chunk;
while (1) {
chunk = (char*) malloc(1000000);
printf("Allocating\n");
}
变量块分配的内存来自 堆。然而,这个内存在另一个块之前没有被释放 内存分配给它。最终,应用程序将用完 内存并异常终止。
所以我的问题: 我有这个示例代码:
int main(int argc, char *argv[]){
char *chunk;
while (1) {
chunk = (char*) malloc(100000000);
printf("Allocating\n");
}
}
我预计我的系统内存不足,但程序继续运行,我看到了文本
Allocating...
一直?
【问题讨论】:
-
而且,你不会对这个内存做任何事情。那么它为什么会崩溃呢?即使它不能分配任何东西,
malloc()也会返回NULL,然后表演继续。 -
malloc() 本身不应该崩溃。如果无法分配内存,它将返回 NULL
-
@KorayTugay 人们可能会反对,因为你没有解释为什么你认为它应该崩溃。始终解释您的想法以及原因。
-
@KorayTugay,不,您不是“不断分配新的 100 Mbs”。您“不断尝试分配 100 Mbs”。那不是一回事。
-
malloc()的手册,尤其是RETURN VALUE和ERRORS(如果有)部分。