首页 > 解决方案 > 使用 [] 运算符而不是使用 malloc 动态分配数组?

问题描述

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

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

标签: cdynamic-memory-allocation

解决方案


这不是动态分配,而是可变长度数组

这种数组的生命周期是它的封闭范围,就像一个固定大小的数组一样,所以你不需要担心释放。这些数组通常驻留在堆栈上,因此堆栈的大小确实限制了 VLA(或任何数组)的大小。

如果您发现 VLA 对于堆栈来说太大,您可以随时退回使用malloc.


推荐阅读