違いが分からん。。。C++おそるべし

デバッグとリリースで挙動が違う。
この手の問題、最近よく遭遇するな~ (^^;)

リリースだと、うまく動かないコード↓


double* pos[3] = {x, y, z};  // xyzはdoubleポインタ
for(int i=0; i<3; i++)
{
     CString strKey;
     strKey.Format("Pos %d", i);
     *pos[i] = um2mm(ini.GetDouble(strKey));
}


um2mmは、ミクロンからmmに変換するインライン関数。
単純に引数を 1000.0 で割って返しているだけ。
ini.GetDouble() は、INIファイル操作クラスのdouble値を取得する関数。
ini内では、挙動が正しいことを確認済み。
だから、おかしいとすると、ここのどこか?
デバッグビルドでは、正しい値が返ってくるんだけど、
リリースだと、xyzの値がすべてNANになってしまう。。。

で、改善後はこちら↓


double* pos[3] = {x, y, z};
for(int i=0; i<3; i++)
{
     CString strKey;
     strKey.Format("Pos %d", i);
     double p = ini.GetDouble(strKey);
     double pp = um2mm(p);
     *pos[i] = pp;
}


いったい何がちがうと言うのだろう???

おそるべし VC の最適化機能。。。

ちなみに、 VC++ 6.0 です。
[PR]
by isoq | 2008-02-12 12:31 | C/C++/Win32
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇
<< 不吉な、、、 窓の杜に掲載して頂きました >>