2017-01-09 38 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會更便於使用。)