通常说在运行时知道大小时我们也可以写
来使用mallocint x;
scanf("%d",&x);
char arr[x];
所以为什么在我们可以动态声明数组时使用malloc。
答案 0 :(得分:3)
写char arr[x];
将在堆栈上分配内存。
堆栈的大小通常限制在1MB左右。如果超过此预定义金额,您将收到运行时错误。有些编译器会允许你改变堆栈大小,但是你最终仍会达到比malloc
更多的数量级的限制。
答案 1 :(得分:1)
VLA
[可变长度数组]是C99
以后的概念。
malloc()
起源于此之前。
此外,malloc()
和family从堆中分配内存。它不使用相对有限的堆栈空间。
OTOH,gcc
在堆栈本身为VLA
s分配空间。