我有一个奇怪的错误,我希望更多的经验程序员可能有一些洞察。我正在使用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