【发布时间】:2019-08-13 06:13:26
【问题描述】:
我正在解决 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;
}
为什么会出现此错误?我能看到的唯一可能的问题是我应该在某处使用指针或引用,但我仍然不清楚它们是如何工作的。
【问题讨论】:
-
遇到段错误时输入什么值?
-
您正在使用未初始化的变量
a。 -
@JohnArg 它在 main 的第一行声明,在任何时候都没有初始化。
-
编译时也请开启警告。编译器会告诉你未初始化变量的使用。
-
@JohnArg 你的编译器应该对可疑代码(你有很多)发出警告。要么你忽略了这些警告,要么你压制了它们。大多数编译器都有启用显示警告消息的选项。
标签: c++ vector segmentation-fault