为什么在此C ++代码中出现分段错误?

时间:2019-08-13 06:13:26

标签: c++ vector segmentation-fault

我已经完成了HackerRank上的问题,到目前为止,我已经能够轻松地完成所有故障排除,但是由于这一点,我遇到了细分错误。

我在网上查询了一下,发现这意味着我正在访问未分配给任务的内存。

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */  
    int N, x, a, b;
    vector<int> v;
    cin >> N;
    for(int i = 0; i < N; i++) {
        int a;
        cin >> a;
        v.push_back(a);
    }
    cin >> x;
    v.erase(v.begin() + x-1);
    v.erase(v.begin() + a-1, v.begin() + b-2);
    cout << v.size() << "\n";
    for(int i = 0; i < v.size(); i++) {
        cout << v[i] << " ";
    }
    return 0;
}

为什么会出现此错误?我看到的唯一可能的问题是,我应该在某个地方使用指针或引用,但是我仍然不清楚它们的工作方式。

1 个答案:

答案 0 :(得分:8)

这里有一个明显的问题

v.erase(v.begin() + a-1, v.begin() + b-2);

程序中任何时候都不会给b赋值。

a都没有初始化,因为尽管您的for循环中有一个变量a,但它与main顶层声明的变量不同。因此,ab都没有被初始化,这也许可以解释您的崩溃。