c - 我什么时候应该使用动态内存分配?
问题描述
我正在学习C 中的malloc
、和calloc
,但我不知道什么时候应该使用这些函数。free
realloc
例如:如果我想在 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
所以在这里我创建了这个程序,没有使用动态内存分配,这让我觉得事情变得更复杂了。
解决方案
堆通常比用于容纳自动变量的区域和静态存储区域(全局变量)大得多。
因此,您可以在以下情况下使用动态分配:
- 您需要分配内存,并在使用后释放它
- 当您需要更改分配的内存大小时。
- 当您需要将在一个任务/函数中分配的内存然后传递给另一个任务/函数并在作用域终止后使用时
- 你需要分配一大块内存。
但在你的例子中
int x[n];
不是动态分配。您只需分配具有大小设置运行时的自动数组。你不能改变它的大小,当你退出范围时你也不能使用它,因为它的生命周期绑定到它定义的范围。
推荐阅读
- python - 利用 Google Cloud Compute Engine V 上的所有 CPU;
- firebase - 如果在 Firebase 规则中?
- python - cross_val_score 不适合实际的输入模型吗?
- node.js - 如果一条消息被删除,则发送另一个消息 Discord.js
- java - Android App apk 大小与安装大小以及如何减小它们?
- r - R Shiny Dashboard 中的反应事件 --> addImageQuery 不响应事件
- c++ - 需要反转音频步长公式
- amazon-web-services - SQS 中的批处理作业完成后如何获得通知
- redis - 如何禁用创建到('redis',6379)打印的tcp连接?
- java - Android Stuido:PC 关闭后库的内存不足(Java 堆空间)错误