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

Why do I get a segmentation fault in this C++ code?

本文关键字:分段 错误 代码 C++ 为什么      更新时间:2023-10-16

我正在完成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;
}

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

这里有一个明显的问题

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

在程序中的任何一点上,您都不会给b一个值。

两者都不是a初始化的,因为尽管 for 循环中有一个变量a,但它与在 main 的顶层声明的变量不同。因此,此时ab都未初始化,这可能解释了您的崩溃。