c - 使用 [] 运算符而不是使用 malloc 动态分配数组?

标签 c dynamic-memory-allocation

我相信这已经被问了一百万次,但我找不到解释它的答案。有人告诉我永远不要这样做,但我还没有真正理解为什么。为什么这样的事情不算动态分配内存,为什么那么糟糕?

int a;
scanf("%d",&a);
int arr[a];

最佳答案

这不是动态分配而是 变长数组 .
这样一个数组的生命周期是它的封闭范围,就像一个固定大小的数组一样,所以你不需要担心释放。这些数组通常驻留在堆栈上,因此堆栈的大小确实限制了 VLA(或任何数组)的大小。
如果您发现 VLA 对于堆栈来说太大,您可以随时回退到使用 malloc .

关于c - 使用 [] 运算符而不是使用 malloc 动态分配数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67125863/

相关文章:

C++ 动态对象。运行时如何确定对象大小?

c++ - 跟踪动态内存

c - 在为该线程评论 pthread_join 时多次执行同一线程子例程

c - 无法在 C 中使用冒泡排序对字符数组进行排序

c - C 中有意签名溢出的示例

c - 无法将二进制文件中的数据读入结构指针数组

c - Visual Studio 2019使用typedef数据类型获取错误C2440

c - 如何在 C 中动态分配二维数组?

c - 打印链表时,为什么原来的头指针没有变

c# - C# 是否像 Objective-C 和 C++ 一样是 C 的超集?