请查看以下2个程序段:
int a,b;
cin>>a>>b;
int arr1[a*b];
int arr2[a];
现在,如果我给'a'= 100000和'b'= 5的输入值,程序显示运行时错误,因为内存溢出我认为。现在看一下代码的另一部分:
int arr1[500000];
int arr2[100000];
现在当我声明上面代码中显示的相同大小的数组时,程序运行正常。为什么会这样?
答案 0 :(得分:1)
现在,当我在运行时声明的相同大小的声明数组时,该程序运行正常。为什么会这样?
因为可变长度数组(又称VLA)不是有效的标准c ++代码。
如果您需要在运行时分配这样的东西,那么惯用的c ++方法就是使用std::vector
:
int a,b;
cin>>a>>b;
std::vector<int> arr1(a*b);
std::vector<int> arr2(a);