分段故障(核心转储)

时间:2017-12-08 11:16:55

标签: c++ segmentation-fault

您好,我是C ++的新手,我不得不填写代码。代码应该读取第一个输入中给出的多个值,然后它应该计算这些值之和的三倍。

我试过这样:

*/

不幸的是我最终陷入了分段错误...... 这是unfinished code

3 个答案:

答案 0 :(得分:2)

vector <double> x; //here x has no space for elements
for (int i =0; i <n ; i++) cin >> x[i] ;

您没有分配内存来存储向量中的元素,因此x[i]超出范围。请改用push_back()

double dummy;
for (int i =0; i <n ; i++)
{ 
    cin >> dummy;
    x.push_back(dummy);
}

答案 1 :(得分:1)

vector <double> x;
for (int i =0; i <n ; i++) cin >> x[i] ;

x此处的大小为零,因此您将元素放在x的无效位置,这很可能导致分段错误(向量不会对operator[]进行任何绑定检查,所以你很幸运有错误。)

要么使vector足够大:

vector <double> x(n);

或者让它处理动态大小调整:

vector <double> x;
for (int i =0; i <n ; i++) {
    double d;
    cin >> d ;
    x.push_back(d);
}

答案 2 :(得分:1)

因为在第vector <double> x;行中,您创建了vector,其大小为0。因此,向量x中没有空格来容纳元素。

要更正您的代码,请执行以下任一操作:

  • 将行vector <double> x;更改为vector <double> x(n);
  • 将行for (int i =0; i <n ; i++) cin >> x[i] ;更改为double temp; for (int i =0; i <n ; i++) {cin >> temp; x.push_back(dummy);}