Malloc 与 C 中的静态数组

Bij*_*jee 2 c arrays malloc static dynamic

当在运行时已知大小时,常说使用 malloc 我们也可以写

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

那么当我们可以动态声明数组时为什么要使用 malloc 呢?

Bat*_*eba 5

写入char arr[x];将在堆栈上分配内存。

堆栈的大小通常限制在 1MB 左右。如果超过此预定义数量,则会出现运行时错误。某些编译器将允许您更改堆栈大小,但您最终仍会达到比使用malloc.

  • 我认为堆栈通常不会那么小,并且所有答案都缺乏关于使用 `free()` 的任何建议,在使用 `malloc()` 的情况下,仅仅因为堆栈不适合它的数据大小,真的很重要。 (2认同)