来自std :: _ Rb_tree_const_iterator <type> :: operator ++ </type>的分段错误

时间:2010-03-01 11:37:41

标签: c++ iterator set

迭代一组时出现分段错误。堆栈跟踪指向

std::_Rb_tree_const_iterator<Type>::operator++
std::_Rb_tree_increment()

但我没有得到更多信息。迭代器在函数

返回的集合上
for (FactSet::factset_iterator fact_it = (*binSet_it).getDependencyGraph().getExtentionalFactSet().begin();
                fact_it != (*binSet_it).getDependencyGraph().getExtentionalFactSet().end();
                ++fact_it) {...}

我看不出这个问题。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

您不希望像这样迭代返回值。每次迭代都会重新评估中间终止条件,因此您的end()每次都会使用不同的集合,这意味着您的迭代器永远不会到达它。

在本地变量中缓存该集合,然后使用begin()end()

答案 1 :(得分:1)

你在循环中擦除元素吗?在这种情况下,您需要获取erase函数的返回值(在删除一个元素之后将迭代器赋予第一个元素),并且在该轮之后不得执行++它(这将跳过下一个元素,或者如果它已经在最后,可能会导致运算符中的段错误。)