📜  使用malloc()后不释放内存时会发生什么

📅  最后修改于: 2021-05-25 21:59:06             🧑  作者: Mango

先决条件: C中的动态内存分配

“ malloc”或“内存分配”方法用于动态分配具有指定大小的单个大内存块。它返回类型为void的指针,该指针可以转换为任何形式的指针。它使用默认垃圾值初始化每个块。

句法:

ptr = (cast-type*) malloc(byte-size)

例如:

但是使用malloc()的内存分配不会自行取消分配。因此,“ free()”方法用于取消分配内存。但是free()方法不是强制性的。如果在程序中未使用free(),则使用malloc()分配的内存将在程序执行完成后被取消分配(所包含的程序执行时间相对较短,并且程序正常结束)。尽管如此,在使用malloc()之后还有一些重要的原因需要free ():

  • 在malloc之后使用free是良好的编程习惯。
  • 有一些程序,例如数字时钟,在后台运行很长时间的侦听器,还有一些此类程序会定期分配内存。在这些情况下,即使很小的存储量也会加起来并造成问题。因此,我们的可用空间减少了。这也称为“内存泄漏”。如果未在正确的时间进行内存的重新分配,我们的系统也可能会发生内存不足的情况。

因此, free()函数的使用取决于程序的类型,但是建议避免诸如内存泄漏之类的不必要的内存问题。

下面是说明free()malloc()用法的程序:

// C program to illustrate free()
// and malloc() function
#include 
#include 
  
// Driver Code
int main()
{
  
    // Pointer to hold base address
    // of memory block
    int* p;
    int n, i;
  
    // Number of element
    n = 3;
  
    // Dynamically allocate memory
    // using malloc()
    p = (int*)malloc(n * sizeof(int));
  
    // Check if memory allocation is
    // successfull or not.
    if (p == NULL) {
        printf("Memory allocation"
               " failed.\n");
        exit(0);
    }
  
    else {
  
        // Memory allocation successful
        printf("Memory allocation "
               "successful using"
               " malloc.\n");
  
        // Insert element in array
        for (i = 0; i < n; i++) {
            p[i] = i + 2;
        }
  
        // Print the array element
        printf("The array elements"
               " are:\n");
  
        for (i = 0; i < n; i++) {
            printf("%d ", p[i]);
        }
  
        // De-allocate the allocated
        // memory using free()
        free(p);
    }
  
    return 0;
}
输出:
Memory allocation successful using malloc.
The array elements are:
2 3 4
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。