【发布时间】:2012-12-17 10:42:52
【问题描述】:
代码:
std::vector<std::string>::iterator first = iter;
if( ++iter != iter_is_pointing_to_this_vector.end())
{
...
当“首先”取消引用迭代器时,会发生分段错误。当注释掉取消引用时,程序只是在 if 语句处停止并且不会继续。 iter 的递增显然没有达到我的预期:我想确保有问题的向量有或没有更多成员传递“iter”指向的项目。
这种行为的原因是什么?
【问题讨论】:
-
iter 指向什么?请显示完整的代码以重现此内容。
-
会不会是
iter在增量之前已经在end()了? -
您可能打算使用
iter + 1,但这似乎仍然是错误的。 -
好的。
vector.end()是指向向量过去 的第一个元素的指针。因此,当iter == vector.end()为真时, (*iter) 已经导致未定义的行为或崩溃。此外,我不确定当您在已经指向结束的迭代器上执行 ++iter 时会发生什么。也许甚至这是被禁止的。我不记得文档是怎么说的:)。可能当iter == v.end()然后++iter也会导致未定义的行为。 -
您正在“在 while 循环的底部”增加迭代器,但您也在代码 sn-p 的 if 语句中增加了迭代器。这意味着迭代器在循环内增加了两次。您的 while 循环不会终止,因为当您在 while 条件下检查迭代器时,迭代器将超出
end()。正如 Pubby 所说,您可能指的是iter + 1,而不是++iter。