わかりました、Visual C++ コンパイラでコンパイルすると完全に正常に動作するプログラムを作成しました。Linuxに移植したいのですが、Linuxでコンパイルした後、奇妙なことが起こります。
そのため、イテレータを使用してリストをループしようとしています。ここにコード:
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()」イテレーターを指していることがわかりました。 )' イテレータなので、'++irIt' を呼び出すと、'begin()' に戻りました。それは予想される動作ですか?そして、私が見つけた別のことは、私がこれを行うときです:
size_t irSize = funcIt->second.prologue.size();
私のようなループを使用してサイズを計算するため、無限ループも発生します。だから、それは期待される動作ではありませんよね?
問題がどこにあるのか、誰かにヒントを教えてもらえますか?
ああ、私は Ubuntu 12.10、g++ バージョン 4.7.2、および Linux GCC をツールチェーンとして使用する Eclipse IDE を使用しています。
ありがとう!