2017-01-09 36 views
-7

当用户输入的数组大小为8时,为什么此代码等待用户输入10个整数?它提供了分段故障时10个整数是used.`简单插入排序中的分段错误?

#include <iostream> 
using namespace std; 
int main() 
{ 
    int x, a[x]; 
    cout << "enter the size of array" << endl; 
    cin >> x; 
    cout << "enter the elements" << endl; 
    for (int j = 0; j < x; j++) 
     cin >> a[j]; 
    for (int i = 1; i < x; i++) { 
     for (int k = 0; k < i; k++) { 
      if (a[i] < a[k]) 
       swap(a[i], a[k]); 
      else 
       continue; 
     } 
    } 
    for (int m = 0; m < x; m++) 
     cout << a[m]; 
} 
+5

因为您声明'a [x]'_before_,所以您知道'x'的值是... – Alnitak

+2

我总是说使用最高的编译器警告开关.... –

回答

4

的问题是,在这些线路:

int x, a[x]; 
cout<<"enter the size of array"<<endl; 
cin>>x; 

在这里,当你声明数组a,它大小它使用存储在x值。然而,在这一点上,你还没有给出x的值,所以你得到一个垃圾大小的数组。稍后在x中读取时不会追溯调整数组的大小(与在一个点更改变量不会追溯更改基于其值的其他变量的方式相同),因此数组大小与读取值不匹配。另外,如果数组太大,您甚至可能在您读取事物的地方发现堆栈溢出!

要解决此问题,请考虑使用类似std::vector而不是原始数组。 (注意,C++不支持可变长度数组,因此使用std::vector会更便于使用。)