を挿入します。原因::セット::私は以下の'addToOurSet`方法で私たちのプログラムがクラッシュ(セグメンテーション違反)の問題をデバッグしようとしています
class SomeClass {
// (...)
void addToOurSet(SomeOtherClass* obj) { ourSet.insert(obj); }
std::set<SomeOtherClass*> ourSet;
};
クラッシュが原因再現するのは難しいです(複雑さと複雑なデータサイズ、デバッグビルドでの再現性の問題など)、上記の例は明らかに非常に単純化されています。トレースバックは、クラッシュが発生して示しています
std::_Rb_tree<...>::insert_unique(SomeOtherClass* const&)
私の質問は:ourSet.insert(...)
方法がクラッシュする可能性がありますか?私が理解する限り、それはポインターであるため、挿入されたオブジェクト自体には何も起こりません。正しい?だからセットそのものの問題を見ていますか?明らかに、何らかの理由でsetポインタが無効な場合、コールはクラッシュする可能性がありますが、たとえば、セットの一部の操作が、このように無効になる可能性があります(たとえば、その末尾を削除したり、
根本的な原因は、 'insert'メソッドで表示されているyoruプログラムの別の場所でメモリが破損している可能性が高いためです。 valgrindまたは同様のツールの下でプログラムを実行しようとしましたか?うまくいけば、 – JaredPar
スタックスマッシュの可能性が指摘されます。 –
私もメモリ破損の疑いがありますが、私自身は(SomeClassインスタンスの削除など)セット自体の無効化に焦点を当てるべきかどうか、あるいはセットの無効な操作でこれが発生する可能性があるかどうかについて質問します。 – Krumelur