C++ 中的分段错误 - 向量
Segmentation Fault in C++ - Vectors
#include <cmath>
#include <cstdio>
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a, b;
cin>>a;
vector<int> numbers;
for(int i=0; i<a; i++)
{
cin>>b;
numbers.push_back(b);
}
int c,d,e;
cin>>c;
numbers.erase(numbers.begin()+c-1);
cin>>d>>e;
numbers.erase(numbers.begin()+d-1, numbers.end()+e);
cout<<numbers.size();
for(int x : numbers)
cout<<x<<" ";
return 0;
}
大家好,
我正在学习 C++ 并编写了一个非常简单的程序,但是这段代码给出了 "Segmentation Fault" 作为错误。我真的不明白为什么会这样。
谢谢。
这一行
numbers.erase(numbers.begin()+d-1, numbers.end()+e);
不可能是正确的。递增 end
迭代器永远不会为您提供有效的迭代器。目前还不太清楚你想做什么,但如果你想删除索引范围内的元素 [d,e)
那么那将是
numbers.erase(numbers.begin()+d, numbers.begin()+e);
注意:第一个不需要 +1
,因为第一个包含在内。通过递增 begin
迭代器而不是 end
迭代器,您可以获得第 e
个元素的迭代器(好吧......我假设常见的基于 0 的计数,即 "first"元素是第0个元素;).
此外,如评论中所述,在调用 erase
之前,您应该检查用户输入的值是否在范围内。 erase
不进行边界检查。如果你传递无效的迭代器,你会得到未定义的行为。
#include <cmath>
#include <cstdio>
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a, b;
cin>>a;
vector<int> numbers;
for(int i=0; i<a; i++)
{
cin>>b;
numbers.push_back(b);
}
int c,d,e;
cin>>c;
numbers.erase(numbers.begin()+c-1);
cin>>d>>e;
numbers.erase(numbers.begin()+d-1, numbers.end()+e);
cout<<numbers.size();
for(int x : numbers)
cout<<x<<" ";
return 0;
}
大家好, 我正在学习 C++ 并编写了一个非常简单的程序,但是这段代码给出了 "Segmentation Fault" 作为错误。我真的不明白为什么会这样。
谢谢。
这一行
numbers.erase(numbers.begin()+d-1, numbers.end()+e);
不可能是正确的。递增 end
迭代器永远不会为您提供有效的迭代器。目前还不太清楚你想做什么,但如果你想删除索引范围内的元素 [d,e)
那么那将是
numbers.erase(numbers.begin()+d, numbers.begin()+e);
注意:第一个不需要 +1
,因为第一个包含在内。通过递增 begin
迭代器而不是 end
迭代器,您可以获得第 e
个元素的迭代器(好吧......我假设常见的基于 0 的计数,即 "first"元素是第0个元素;).
此外,如评论中所述,在调用 erase
之前,您应该检查用户输入的值是否在范围内。 erase
不进行边界检查。如果你传递无效的迭代器,你会得到未定义的行为。