如果我写if (p == NULL) { break; }
会怎样?
#include <stdio.h>
void main()
{
int *p;
while (1)
{
p = malloc(1024); // allocating memory in infinite while loop
// if (p == NULL) { break; }
}
}
答案 0 :(得分:1)
您最终可能会耗尽内存,malloc
在这种情况下必须返回NULL
。但请注意,在您使用它之前,某些C运行时库和操作系统实际上不会分配内存。由于您没有使用内存,您可能会发现循环永远运行,但不是由于malloc
明显失败。
如果if
无法分配,则包含malloc
语句将结束该程序。如果C运行时库和操作系统的行为方式与我提到的方式相同,那么malloc
可能永远不会失败,并且您的程序可能无限地循环尽管 if
条件。
答案 1 :(得分:0)
以下情况会发生什么?
你的堆会满满的。发生这种情况时,malloc()
将无法再分配内存,并且无限期地返回NULL
个指针。
如果我写
if (p == NULL) { break; }
会怎样?
你的堆会满满的。但是在这里,你的程序将会退出,因为如果while
无法分配内存,你就会突然出现malloc()
循环。