在 65536 位置访问迭代器的指针运算符会导致段错误
Accessing pointer operator of iterator at 65536 position causes segfault
巧合的是,代码似乎在无符号短的最大值的确切数量上失败。
map<int,vector<string> > backofflist;
for (int k = backofflist.size(); k > 0; k--) // for ($i=$#backofflist;$i>0;$i--)
{
vector<string>::iterator backofflist_iter;
int i = 0;
for (backofflist_iter=backofflist[k].begin();
backofflist_iter!=backofflist[k].end();
backofflist_iter++) // foreach $x (@($backofflist[$i]))
{
cout << i++ << endl;
string x;
try
{
x = *backofflist_iter; //foreach $x (@{$backofflist[$i]})
}
catch (exception &e)
{
cout << e.what() << endl;
exit(1);
}
生成以下输出:
...
65532
65533
65534
65535
65536
{segfault}
我以为矢量有无限的容量?我错过了什么吗?我正在雪豹的XCode上编写这个程序。
此问题的唯一解决方案是在调用此代码之前将错误的std::vector
插入到映射中,或以其他方式损坏了现有std::vector
。代码的这一特定部分始终是明确定义的行为,如果backofflist
没有填满您期望的键,则不一定是你期望的行为。
当然,缩进表明这不是您的整个循环,这可能是问题所在。
尝试注释此行
x = *backofflist_iter; //foreach $x (@{$backofflist[$i]})
重新编译,然后粘贴答案。如果您有其他段错误。打印完整的错误消息。
相关文章:
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 如何摆脱C ++中的分段错误错误?
- Clang 8 带有静态 constexpr 和数组的链接器错误 - 错误是什么以及如何解决它?
- 为什么每当我尝试运行此链接列表删除功能时都会收到分段错误错误?
- 如何解决分段错误错误C++
- 作为参数模板的模板类:MSVC 错误 - 错误 C2977:模板参数过多 (C++98)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- 卷曲给出分段错误错误
- 无法访问 Arduino 结构字段。错误"退出状态 1。xxxx 不命名类型"
- 错误错误 C2872:"布尔值":kinect.h 的不明确符号
- C++打印模板容器错误(错误:"运算符<<"的不明确重载)理解?
- 结构的分割错误错误
- 为什么此代码返回分段错误错误?
- 错误错误:无法编译内置功能
- 分段错误错误C++
- C++ 1Z 错误:错误:演绎指南中声明中的显式限定
- 使用对数据类型的向量的哈希表中的分段错误错误
- 为什么此代码会导致分段错误错误
- JNA结构字段值错误
- C++段故障错误