运行时和编译时的数组声明

时间:2017-02-11 06:20:59

标签: c++ arrays variable-length-array

请查看以下2个程序段:

  int a,b; 
  cin>>a>>b;   
  int arr1[a*b];
  int arr2[a];

现在,如果我给'a'= 100000和'b'= 5的输入值,程序显示运行时错误,因为内存溢出我认为。现在看一下代码的另一部分:

  int arr1[500000];
  int arr2[100000];

现在当我声明上面代码中显示的相同大小的数组时,程序运行正常。为什么会这样?

1 个答案:

答案 0 :(得分:1)

  

现在,当我在运行时声明的相同大小的声明数组时,该程序运行正常。为什么会这样?

因为可变长度数组(又称VLA)不是有效的标准c ++代码。

如果您需要在运行时分配这样的东西,那么惯用的c ++方法就是使用std::vector

int a,b; 
cin>>a>>b;   
std::vector<int> arr1(a*b);
std::vector<int> arr2(a);