-O2 を指定して gcc (4.1.2) でビルドされた C++ コードがあります。
このコードを最適化せずにコンパイルして実行すると、プログラムは問題なく実行されます。
O1/O2/O3 でコンパイルすると、無効な解放を示す valgrind でコードがクラッシュします。これは、関数内の文字列変数に絞り込まれています。
コードはファイルを読み取り、内容を反復します。すべての処理コードを削除しました。次のコード スニペットにより、コアが発生します...
int MyParser::iParseConfig(Config &inConfig)
{
bool keepGoing = true;
while(keepGoing)
{
string valueKey = "";
keepGoing = false;
}
return 0;
}
これが最適化されていない状態で実行されると、正常に動作します。これを最適化してビルドして実行すると、機能しません。
GCC が文字列クラスを最適化する方法に問題があるようです。
これを回避する方法はありますか?