Мне нужна помощь с необычной ошибкой во время выполнения. Вот код, который дает ему:STL map итератор ошибка времени выполнения
JacobianCol &diag_index_column = J[diag_index];
JacobianColData::iterator &diagonal_element = diag_index_column.find(diag_index);
Jacobian J2 = J; //added to reveal the problem
J[diag_index].divide_by(diagonal_element);
Что я хочу. Я хочу сохранить итератор diagonal_element и передать его функции divide_by. Но когда я звоню J переменная итератор идет вниз. Указатель на память остается (я проверил это в отладчике), но содержимое итератора искажается (переменная без ссылок).
Что я делаю неправильно?
немного кода:
якобиан J:
class Jacobian
{
private:
std::vector<JacobianCol> _J;
...
public:
...
JacobianCol& operator [](int i); //return _J[i];
};
JacobianCol:
typedef std::map<int, Submatrix> JacobianColData;
class JacobianCol
{
private:
...
JacobianColData _col_data;
public:
...
JacobianColData::iterator &find(int key, bool need_append = false);
};
реализация находкой:
JacobianColData::iterator &JacobianCol::find(int key, bool need_append)
{
if(need_append)
this->insert(key);
JacobianColData::iterator &res = this->_col_data.find(key);
return res;
}
Что делать, если 'это -> _ col_data.find (ключ); 'возвращает' end() '? Если вызывающий абонент разыскивает его, это вызывает неопределенное поведение. – hmjd