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