c - 使用 [] 运算符而不是使用 malloc 动态分配数组?
问题描述
我确信这已经被问了一百万次,但我找不到解释它的答案。有人告诉我永远不要这样做,但我真的不明白为什么。为什么这样的事情不能算作动态分配内存,为什么那么糟糕?
int a;
scanf("%d",&a);
int arr[a];
解决方案
这不是动态分配,而是可变长度数组。
这种数组的生命周期是它的封闭范围,就像一个固定大小的数组一样,所以你不需要担心释放。这些数组通常驻留在堆栈上,因此堆栈的大小确实限制了 VLA(或任何数组)的大小。
如果您发现 VLA 对于堆栈来说太大,您可以随时退回使用malloc
.