为什么当用户输入的数组大小为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];
}
答案 0 :(得分:4)
问题在于以下几点:
int x, a[x];
cout<<"enter the size of array"<<endl;
cin>>x;
此处,当您声明数组a
时,它会使用x
中存储的值对其进行调整。但是,此时,您还没有给x
一个值,因此您获得了一个垃圾大小数组。稍后在x
中阅读并不会追溯调整数组的大小(与在某一点更改变量不会追溯更改其值基于它的其他变量的方式相同),因此数组大小与读取值不匹配。另外,如果阵列太大,你可能会在到达你读书的地方之前获得堆栈溢出!
要解决此问题,请考虑使用std::vector
之类的内容而不是原始数组。 (注意,C ++中不支持可变长度数组,因此使用std::vector
会更便携。)