経験豊富なプログラマーが何らかの洞察を持っていることを願っています。私はブースト ublas 疎行列、具体的には mapping_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 maps_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マトリックスにあるように思えますが、どういうわけか、基礎となるストレージメカニズムが「それを置き忘れた」のです。ただし、なぜそれを修正するのか、またはどのように修正するのかはわかりません。それはまた、完全にベースから外れている可能性があります。
あなたが提供できるどんな助けも大歓迎です。この質問に正しい情報が含まれていない場合は、何が欠けているか教えてください。ありがとうございました。