如果堆内存已满,会发生什么?

时间:2018-04-04 13:35:32

标签: c dynamic-memory-allocation

  1. 以下情况会发生什么?
  2. 如果我写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; }
        }  
    }  
    

2 个答案:

答案 0 :(得分:1)

  1. 您最终可能会耗尽内存,malloc在这种情况下必须返回NULL。但请注意,在您使用它之前,某些C运行时库和操作系统实际上不会分配内存。由于您没有使用内存,您可能会发现循环永远运行,但不是由于malloc明显失败。

  2. 如果if无法分配,则包含malloc语句将结束该程序。如果C运行时库和操作系统的行为方式与我提到的方式相同,那么malloc可能永远不会失败,并且您的程序可能无限地循环尽管 if条件。

答案 1 :(得分:0)

  

以下情况会发生什么?

你的堆会满满的。发生这种情况时,malloc()将无法再分配内存,并且无限期地返回NULL个指针。

  

如果我写if (p == NULL) { break; }会怎样?

你的堆会满满的。但是在这里,你的程序将会退出,因为如果while无法分配内存,你就会突然出现malloc()循环。