1
我需要關於奇怪運行時錯誤的幫助。這裏給出它的代碼:STL映射迭代器運行時錯誤
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變量時,迭代器就會關閉。指向內存的指針保持不變(我在調試器中檢查過),但迭代器的內容損壞(未引用的變量)。
我在做什麼錯?
更多的代碼:
雅可比記者:
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 (key);'returns'end()'?如果調用者將其解引用,它會導致未定義的行爲。 – hmjd