迭代一组时出现分段错误。堆栈跟踪指向
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) {...}
我看不出这个问题。 提前谢谢。
答案 0 :(得分:2)
您不希望像这样迭代返回值。每次迭代都会重新评估中间终止条件,因此您的end()
每次都会使用不同的集合,这意味着您的迭代器永远不会到达它。
在本地变量中缓存该集合,然后使用begin()
和end()
。
答案 1 :(得分:1)
你在循环中擦除元素吗?在这种情况下,您需要获取erase函数的返回值(在删除一个元素之后将迭代器赋予第一个元素),并且在该轮之后不得执行++它(这将跳过下一个元素,或者如果它已经在最后,可能会导致运算符中的段错误。)