简单插入排序中的分段错误?

时间:2017-01-09 17:40:28

标签: c++ arrays

为什么当用户输入的数组大小为8时,此代码等待用户输入10个整数?当使用10个整数时,它会产生分段错误。

#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];
}

1 个答案:

答案 0 :(得分:4)

问题在于以下几点:

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

此处,当您声明数组a时,它会使用x中存储的值对其进行调整。但是,此时,您还没有给x一个值,因此您获得了一个垃圾大小数组。稍后在x中阅读并不会追溯调整数组的大小(与在某一点更改变量不会追溯更改其值基于它的其他变量的方式相同),因此数组大小与读取值不匹配。另外,如果阵列太大,你可能会在到达你读书的地方之前获得堆栈溢出!

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