首页 > 解决方案 > 我什么时候应该使用动态内存分配?

问题描述

我正在学习C 中的malloc、和calloc,但我不知道什么时候应该使用这些函数。freerealloc

例如:如果我想在 C 中创建一个创建数组的程序,并且它的大小由用户输入确定:

   int n;
   printf("Enter THe Number of element in Array:..\n");
   scanf("%d",&n);
   int x[n];
   for(int i = 0 ; i < n ; i++)
   {

       x[i] = i+ 1;
   }
      for(int y = 0 ; y < n ; y++)
   {

       printf("%d\n",x[y]);
   }

输出:

Enter THe Number of element in Array:..
5
1
2
3
4
5

所以在这里我创建了这个程序,没有使用动态内存分配,这让我觉得事情变得更复杂了。

标签: cpointers

解决方案


堆通常比用于容纳自动变量的区域和静态存储区域(全局变量)大得多。

因此,您可以在以下情况下使用动态分配:

  1. 您需要分配内存,并在使用后释放它
  2. 当您需要更改分配的内存大小时。
  3. 当您需要将在一个任务/函数中分配的内存然后传递给另一个任务/函数并在作用域终止后使用时
  4. 你需要分配一大块内存。

但在你的例子中

int x[n];

不是动态分配。您只需分配具有大小设置运行时的自动数组。你不能改变它的大小,当你退出范围时你也不能使用它,因为它的生命周期绑定到它定义的范围。


推荐阅读