2012-01-12 4 views
1

今日、私は無限ループに入った要素の要素を出力しようとしていました。 iは集合の大きさを取得しようとした場合 は、8std :: setの繰り返しが終了しない

コードたそれは私に返される正しい値は、それがサイズをフェッチする前に、上記の宣言されたこの

 std::cout << "size of set is " << myset.size(); 
    for(it=myset.begin();it!=myset.end();it++) 
    std::cout << "value is : " << *it; 

イテレータのようでした。興味深い事実の1つは、印刷中に期待された要素の1つがセットにないことでした。

私はあなたに怒ったり、馬鹿げたミスをしていることは知っていますが、私の心配はそれですか? myset.end()はいくつかのランダムな場所を指していますか?しかし、なぜ、印刷中にセットから要素を繰り返してクラッシュしないのでしょうか?

+5

問題は、私たちに表示されないコードにあります。 –

+0

私の関心はcan end()function haywireに行きました...私はそれを見たことがありません 2番目のものはなぜサイズが8で、私は印刷サイズのfor文の真下にforループがあります。どのようにそれは間違って行くことができますか? – Invictus

+0

エラーを示す* complete *、* minimal *サンプルプログラムを投稿してください。 *完全な*プログラムはコピー&ペーストとコンパイルが可能なプログラムです。 * * minimal *プログラムには、問題に無関係な行は含まれません。私はそれを作ることは難しいと思っていますが、それは貴重です。私たちはあなたの問題をより良く解決することができます。また、最小限のサンプルを作成しながら、それをあなた自身で解決することもできます。 http://sscce.org/を参照してください。 –

答えて

1

.end()すべてのSTLコンテナによって返されたイテレータは、コンテナの1つの先行端に戻り、逆参照すると(*iterator)未定義の動作。

forループは.end()を参照解除しませんが、イテレータが.end()と等しいときに停止するため、投稿したコードで問題になることはありません。他のコードでは以前とは異なるミスがあったでしょう。

+0

はい、それを参照すると、セグメント化エラーが全体的に発生します。しかし、私の場合は違います。私はそれがループのために無限に行くのを除いてエラーが出ていません。サイズが8で表示されています:( – Invictus

+0

投稿したループはサイズを表示せず、サイズラインはループの上にあります。実際のエラーを見つける:) –

+0

ええループは私のセットの要素を印刷します。それは無限ループに入ってから、セットのために表示されているサイズを確認するためにサイズを印刷しました。実際のコードは、私がここに複製するのが難しいと思われる長いものと機密のものです – Invictus

関連する問題