私はプログラマが経験を積んだと思う奇妙なバグがあります。私はboostas ubasスパース行列、特にmapped_matrixを使用していますが、最終的には発生する断続的なバグがありますが、プログラムの初期段階では発生しません。これは、大規模プログラムであるので、私はすべてのコードを投稿することはできないが、核となるアイデアは、私は特定のクラスに属する関数を呼び出すことである:変数cはクラスのメンバーとして定義されるboost sparse_matrixの要素にアクセスすると、プログラムが停止するようです。
bool MyClass::get_cell(unsigned int i, unsigned int j) const
{
return c(i,j);
}
を
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行列の要素何とかなるストレージ・メカニズムがある「見当違いのこと」があるように私には思えます。しかし、それをどうやって修正するのか分かりません。それはまた、完全に基盤から離れている可能性があります。
ご提供いただけるご支援をいただければ幸いです。この質問に適切な情報が含まれていない場合は、私に何が欠けているか教えてください。ありがとうございました。
ありがとうございます。私はboolからintに変更しようとしましたが、同じ問題が発生します。私は単純な行列に変更して問題は解決しましたが、実際にはまばらな行列を使用しないと使用するには遅すぎます。 私もget_cellを呼び出そうとしましたが、マトリックスが変更された場所が多くあり、それらをすべて見つけたとは確信していません。 残念ながら、私は回避策を使用してしばらくの間、この問題をバックバーナーに入れなければなりませんでした。あなたの提案をありがとう、私は後で問題を特定できる場合は、私はそれを投稿します。 – RandomGuy
valgrindでメモリがリークしていることを発見すると、問題は解決しました。ご協力ありがとうございました。 – RandomGuy