没有指针的c++分段错误(HackerRank)
C++ Segmentation Fault with no pointers (HackerRank)
我解决了黑客排名中的一个问题。
代码:输入格式。输入的第一行包含一个整数N,下一行包含N个以空格分隔的整数。第三行包含一个整数x,表示应该从vector中移除的元素的位置。第四行包含两个整数a和b,表示应该从包含a但不包含b的向量中擦除的范围。
输出格式。打印第一行vector对象的大小,以及第二行两次擦除操作后vector对象的元素(以空格分隔)。
#include <vector>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main() {
int n = 0, x = 0, value = 0;
vector<int> vk, vm;
vk.reserve(100000);
string k, m;
cin >> n;
cin.ignore();
getline(cin, k);
cin >> x;
cin.ignore();
getline(cin, m);
stringstream sk(k);
while (sk >> value)
vk.push_back(value);
stringstream sm(m);
while (sm >> value)
vm.push_back(value);
vk.erase(vk.begin() + x-1);
vk.erase(vk.begin() + vm[0]-1, vk.begin() + vm[1]-1);
cout << vk.size() << endl;
for (int i = 0; i < vk.size(); i++)
cout << vk[i] << " ";
cout << endl;
return 0;
}
但是这个测试用例产生了一个"分割错误":
6
1 4 6 2 8 9
2
2 4
你能帮我检查我的代码并提供一些问题的反馈吗?
编辑
感谢@john的回答。下面是没有segfault的情况:
#include <vector>
#include <iostream>
#include <string>
using namespace std;
int main() {
int n = 0, x = 0, y = 0, z = 0, value = 0;
vector<int> vk;
vk.reserve(100000);
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> value;
vk.push_back(value);
}
cin >> x >> y >> z;
vk.erase(vk.begin() + x-1);
vk.erase(vk.begin() + y-1, vk.begin() + z-1);
cout << vk.size() << endl;
for (int i = 0; i < vk.size(); i++)
cout << vk[i] << " ";
cout << endl;
return 0;
}
您的输入代码太辛苦了。这是不正确的,因为你似乎假设cin.ignore()
将跳过其余的行,当它只跳过下一个字符(这可能是一个空格)。我想这就是隔离故障的原因。读完第一个数字后,你就能知道你要读多少个数字了。根本不需要使用getline
或stringsteam
。
你不需要vm向量。它将始终包含两个值,因此只需声明两个变量。您还可以为所有变量选择更好的名称。
cin >> n;
for (int i = 0; i < n; ++i)
{
cin >> value;
vk.push_back(value);
}
cin >> x >> vm0 >> vm1;
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- 请发现它在 dev 中工作的错误,但在 hackerrank 中不起作用
- 代码在我的系统上运行良好,但在 HackerRank 提交时出现分段错误
- 没有指针的c++分段错误(HackerRank)
- 这是HackerRank的错误解决方案