分段故障(核心倾倒)



嗨,我是C 的新手,我必须填写一个代码。代码应读取与第一个输入中给出的值一样多的值,之后应计算这些值的总和的三倍。

我尝试过这样的尝试:

#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
    if (argc != 2) {
        return 1;
    }
    int n = atoi(argv[1]);
    vector<double> x;
    for (int i = 0; i < n; i++)
        cin >> x[i];
    double v = 0;
    for (int i = 0; i < n; i++)
        v = 3 * x[i];
    cout << v << endl;
    return 0;
}

不幸的是,我最终陷入了细分故障...这是未完成的代码

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);
}
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);
}

,因为在vector <double> x;中,您创建了一个具有0大小的vector。因此,向量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);}

相关内容

  • 没有找到相关文章

最新更新