私はVisual C++コンパイラでコンパイルすると完全に正常に動作するプログラムを作成しました。今、私はそれをlinuxに移植したいが、linuxでコンパイルした後に起こっている厄介なことが起こっている。C++のリストイテレータは、反復処理時にend()に到達しません
したがって、イテレータを使用してリストをループしようとしています。ここにコード:
for (list<IntermediateRepresentation>::iterator irIt = funcIt->second.prologue.begin(); irIt != funcIt->second.prologue.end(); ++irIt) {
irIt->address = address;
address += getOpcodeSize(irIt->opcode);
}
ここで問題は、無限ループが発生することです。私はなぜそれがデバッガでそうしていたのかを調べようとしましたが、リストの最後の要素( 'end()'の直前)が 'end()'の代わりに 'begin()'イテレータを指していたことがわかりました。 ) 'iteratorだから私は' ++ irit 'と呼んだとき、' begin() 'に戻りました。それは期待された行動ですか?それは私に似たループを使用してサイズを計算するので、あまりにも無限ループを引き起こし
size_t irSize = funcIt->second.prologue.size();
こと: そして、私が見つけたもう一つの事は、私がこれを行うときということです。それで、それは正しい行動が期待できないのですか?
誰かに問題の可能性のあるヒントを教えてもらえますか?
ああ、私はUbuntu 12.10、g ++バージョン4.7.2、Linux GCCのEclipse IDEをツールチェーンとして使用しています。
ありがとうございます!
はい、それは標準です::リスト –
これは期待された動作ではありません。メモリの破損のように見えますが、 'end'ポインタを見て、あなたのプログラムをステップバイステップで調べることができますか? – filmor
どこからfuncItを取得しますか?タイプの 'funcIt-> second'とは何ですか?型の 'funcIt-> second.prologue'とは何ですか? –