我有一個奇怪的錯誤,我希望更多的經驗程序員可能有一些洞察。我正在使用boost ublas稀疏矩陣,特別是mapped_matrix,並且最終發生了一個間歇性錯誤,但不是程序的初始階段。這是一個大的程序,所以不能發佈所有的代碼,但其核心思想是,我稱之爲屬於一個特定類的函數:訪問提升sparse_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矩陣中有一些元素,但不知何故底層存儲機制「錯放了它」。但是,我不確定爲什麼或者如何解決這個問題。這也可能完全脫離基地。
任何幫助,你可以提供將不勝感激。如果我沒有在這個問題中包含正確的信息,請讓我知道我錯過了什麼。謝謝。
謝謝你的建議。我試圖從一個布爾變成一個int併發生同樣的問題。我改成了一個普通的矩陣,問題就消失了,但是如果不使用稀疏矩陣,實際使用速度太慢。 我也試着調用get_cell,但是有很多地方矩陣被修改,我不確定我是否找到了它們。 不幸的是,我不得不使用一種解決方法,並把這個問題放在backburner一段時間。感謝您的建議,如果我能在稍後確定問題,我會發布它。 – RandomGuy 2009-08-25 15:37:38
用valgrind查找泄漏內存解決了這個問題。感謝您的幫助。 – RandomGuy 2009-08-31 21:31:10