Ошибка сегментации от std :: _ Rb_tree_const_iterator <Type>:: operator ++ - PullRequest
1 голос
/ 01 марта 2010

Я получаю ошибку сегментации при итерации по набору. Трассировка стека указывает на

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 ]

2 голосов
/ 01 марта 2010

Вы не хотите перебирать возвращаемое значение, как это. Условие среднего завершения переоценивается на каждой итерации, поэтому ваш end() будет каждый раз для нового набора, что означает, что ваш итератор никогда не достигнет его.

Кэшируйте набор в локальной переменной, а затем используйте begin() и end() из этого.

1 голос
/ 01 марта 2010

Вы стираете элементы в цикле? В этом случае вам нужно принять возвращаемое значение функции стирания (которая дает итератор первому элементу после удаленного элемента), и вы не должны выполнять ++ его после этого раунда (который пропустит следующий элемент, или если это уже было в конце, возможно, вызвать ошибку в операторе ++).

...