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

spi*_*lis 7 c dynamic-memory-allocation

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

int a;
scanf("%d",&a);
int arr[a];
Run Code Online (Sandbox Code Playgroud)

dbu*_*ush 4

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

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

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

  • @spiroulis 如果数组不是很大,即 1MB 或更大,那么它很有用。 (2认同)