巧合的是,代码似乎在无符号短整数的最大值的确切数量上失败。
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}
我认为矢量具有无限的容量?有什么我想念的吗?我正在Snow Leopard的XCode上编写这个程序。
答案 0 :(得分:3)
此问题的唯一解决方案是在调用此代码之前将错误的std::vector
插入到地图中,否则会损坏现有的std::vector
。代码的这一特定部分始终是明确定义的行为,如果backofflist
未满足您期望的密钥,则不一定是您期望的行为。
当然,缩进表明这不是你的整个循环,这可能是问题所在。
答案 1 :(得分:0)
尝试评论此行
x = *backofflist_iter; //foreach $x (@{$backofflist[$i]})
重新编译,然后粘贴答案。如果你有另一个段错误。打印完整的错误消息。