c - 在 C 中,与 malloc 和变量数组声明相关的两个给定代码片段之间有什么区别?
问题描述
下面的代码做同样的事情吗?
代码片段 1:
#include <stdio.h>
int main(void){
int size;
scanf("%d", &size);
int arr[size];
//code to manipulate array
return 0;
}
代码片段 2:
#include <stdio.h>
int main(void){
int size;
scanf("%d", &size);
int *arr = malloc(size*sizeof(int));
//code to manipulate array
free(arr);
return 0;
}
解决方案
这些不一样。
第一个片段创建一个具有自动存储持续时间的数组,即在大多数实现中在堆栈上,而第二个片段在堆上动态创建一个数组。前者的作用域有一个生命周期,而不是封闭它,而后者在程序的生命周期内或直到它被释放之前都有效,以先到者为准。
推荐阅读
- javascript - AWS S3 SDK Javascript - 在 ManagedUpload 上构建事件工作?
- vue.js - 将数据从一个组件传输到另一个组件
- python - 从 Python 中的字典中提供函数默认参数
- java - 需要根据项目编号点击复选框
- c# - 如何在 C# 中找到 2 个不同类型列表中的重复字段a 并将它们从两个列表中删除
- laravel - 我如何获取从数据库中选择的值进行编辑
- exception - Spring 安全处理 PreAuthenticatedCredentialsNotFoundException 以产生 403 或 401
- android - Android :: java.security.KeyStoreException:存储私钥失败
- javascript - 如何更改 shoppy 嵌入式小部件的 CSS?
- reactjs - 如何使用 MomentJS 将自定义日期设置为 react-datepicker 的 DatePicker?