我知道如果数组是本地的,则在堆栈中分配大小。如何在代码中将内存分配给后续数组。此外,当我给-20输入负输入时,答案是-80。它用于在早期编译器中给出错误但现在不是。那么它现在如何处理呢?
int main()
{
int i;
scanf("%d",&i);
int a[i];
printf("%d",sizeof(a));
}
答案 0 :(得分:4)
你拥有的是 Variable length array(VLA) ,这在C标准中是允许的,但在C ++中则不允许。
大多数C ++编译器通过编译器扩展为它提供支持。 C ++标准提供了一个std::vector
,它通常用于C ++而不是VLA,因为使用VLA会使您的代码不可移植。
对于用户程序,VLA的元素位于连续的内存位置,就像普通数组一样。唯一的区别是可以在运行时指定数组的长度。
当您为VLA提供负面大小时,您调用的内容是未定义行为。
<强>参考:强>
C99标准§6.7.5.2:
如果size是一个不是整数常量表达式的表达式......每次计算它时,它的值应大于零。