Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如果堆内存已满,会发生什么情况? 在下面的情况下会发生什么_C_Dynamic Memory Allocation - Fatal编程技术网

C 如果堆内存已满,会发生什么情况? 在下面的情况下会发生什么

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() {

如果(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()
{  
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
    指针。正如费利克斯所说,什么也不会发生。