C 如果堆内存已满,会发生什么情况? 在下面的情况下会发生什么
如果(p==NULL){break;}写C 如果堆内存已满,会发生什么情况? 在下面的情况下会发生什么,c,dynamic-memory-allocation,C,Dynamic Memory Allocation,如果(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; } } } #包括 void main() {
会发生什么
#include <stdio.h>
void main()
{
int *p;
while (1)
{
p = malloc(1024); // allocating memory in infinite while loop
// if (p == NULL) { break; }
}
}
#包括
void main()
{
int*p;
而(1)
{
p=malloc(1024);//在无限while循环中分配内存
//如果(p==NULL){break;}
}
}
在下面的情况下会发生什么
你的堆会满的。当这种情况发生时,malloc()
将无法再分配内存,它将无限期地返回NULL
指针
如果(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; }
}
}
你的堆会满的。但在这里,您的程序将退出,因为在malloc()
无法分配内存的情况下,您将在过程中中断循环
您可能希望最终耗尽内存,在这种情况下,malloc
必须返回NULL
。但是请注意,一些C运行库和操作系统在使用内存之前不会实际分配内存。由于没有使用内存,您可能会发现循环永远运行,但这不是由于malloc
的显式故障造成的
如果malloc
分配失败,则包含if
语句将结束程序。如果C运行库和操作系统的运行方式与我前面提到的一样,那么malloc
可能永远不会分配失败,并且您的程序可能会无限循环,尽管If
有条件
如果malloc返回null,而您取消引用null,则会出现分段错误或未定义的行为。这是一个家庭作业问题吗?您的意思是:如果(p==null){break;}
?1。您的意思可能是if(p==NULL)
(或者干脆是if(!p)
)。2.应该足够回答这个问题了。@FelixPalmen:这并不是很明显,尤其是在你实际使用之前没有内存的平台上。在第一种情况下,它将返回null。但是我没有使用if(p==NULL){break;}。所以它不会退出循环。那么内存中会发生什么呢?@utkarspatel即使您继续调用malloc()
,它也无法分配。相反,每次调用它时,它将返回一个NULL
指针。正如费利克斯所说,什么也不会发生。