2012-01-27 9 views
0

セットを反復処理すると、セグメンテーションフォルトが発生します。 STDで 0x000000081193ccc5にスタックトレースポイント:: _ Rb_tree_increment stl_tree.hでのstd :: _ Rb_tree_const_iterator ::演算子++で/libstdc++/src/tree.cc:68 0x0000000806c3107eで(__X = 0x1の):266std :: _ Rb_tree_increment(__x = 0x1)からのセグメンテーションフォールト

けどもっと有益な情報は得られませんが、クラッシュの最終行は以下の通りです。イテレーターはセットを超えています。

typedef std::set<test*,test_less> test_set_t; 

    test_set_t& set(bt->getSet()); // getSet() will return reference to the class bt member variable set 

test_set_t::iterator pos = set.begin(); 

test empty(val); 
test* last_ptr = &empty; 

for (; pos != set.end(); last_ptr = *pos++) {  // gdb shows this as last line 

私は問題を見ることができません。前もって感謝します。

+0

ループ内に何があるのか​​を表示してください。その中に何かが原因で障害が発生している可能性があります(ただし、あなたが言及した行だけで認識されます)。 –

+0

完全な最小テストケースは、あなたがUBをどこかで呼び出しているように見えるので、UBの症状はどこにでも現れることがありますので、実際のコードを提示するのはまともな方法です構造化された方法でものをデバッグする。 – PlasmaHH

答えて

1

ほとんどの場合、セットが空であるか、またはアイテムを消去したときに、posが反復中に指していた可能性があります。

+0

私が得ているこのクラッシュは再現性がなく、内部コードはここで(関数を呼び出すための)それについて議論するのが複雑です。誰かがセットのサンプルプログラムの助けを借りて同じコアを得ることを提案することができます。この方法でデバッグすると非常に役に立ちます。 – Omprakash

関連する問題