У меня есть странная ошибка, о которой я надеюсь, что более опытный программист может что-то понять. Я использую разреженные матрицы boost ublas, в частности mapped_matrix, и периодически возникает ошибка, которая возникает в конечном итоге, но не на начальных этапах программы. Это большая программа, поэтому я не могу опубликовать весь код, но основная идея заключается в том, что я вызываю функцию, принадлежащую определенному классу:
bool MyClass::get_cell(unsigned int i, unsigned int j) const
{
return c(i,j);
}
Переменная c определена как член класса
boost::numeric::ublas::mapped_matrix<bool> c;
При возникновении ошибки программа как бы останавливается (но не вылетает). При отладке с помощью Eclipse я вижу, что программа входит в код boost mapped_matrix и переходит на несколько уровней вниз в std::map, std::_Rb_tree и std::less. Кроме того, программа иногда приводит к std::map, std::_Rb_tree и std::_Select1st. Пока код выполняется и активная строка, что находится в памяти, изменяется в _Rb_tree, кажется, что выполнение никогда не возвращается на уровень std::map. Строка в std::map, на которой застряла программа, является возвратом следующей функции.
const_iterator
find(const key_type& __x) const
{ return _M_t.find(__x); }
Мне кажется, что в матрице c есть какой-то элемент, который программа ищет, но каким-то образом базовый механизм хранения «потерял его». Однако я не уверен, почему и как это исправить. Это также может быть совершенно не так.
Любая помощь, которую вы можете предоставить, будет принята с благодарностью. Если я не включил правильную информацию в этот вопрос, сообщите мне, что мне не хватает. Спасибо.