- 締切済み
デバッグビルドとリリースビルドで計算結果が違う
こんにちは。 VC++.netで暗号化ソフトを作っているんですが、デバッグモードで実行した結果と、リリースモードで実行して得られる結果が違うので困っています。 原因としては、何が考えられるでしょうか? warningで、「warning C4267: '=' : 'size_t' から 'int' に変換しました。データが失われているかもしれません。」と表示されましたが、(int)でキャストしてから警告は出なくはなっているんですが。 もう一つ、「LINK : warning LNK4089: 'SHELL32.dll' へのすべての参照は /OPT:REF によって廃棄されます。」と出ていますが、これは関係なさそうですので無視しています。 もしかして、同じような経験をされた方がいるんではないかと思い質問しました。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kary
- ベストアンサー率55% (10/18)
回答No.2
assertのなかで副作用のある処理をすると問題が生じるような気がします。例えば、assert(++foo>0)など。
- tatsu99
- ベストアンサー率52% (391/751)
回答No.1
値を初期化しないで使用した時に、この現象が発生する可能性が高いです。 例えば、関数のなかで、int a;と変数を動的変数として宣言し、このaを初期化せずに、 int b = a*a; を実行した場合、デバッグモードの場合は、0になる可能性が高く、リリースモードの場合は、不定(前回のスタック領域で使用された値)になります。
質問者
補足
回答ありがとうございます。その可能性もありそうです。プログラム自体はWEBから探してきたものですので、これから自力でチェックしてみようと思います。
補足
細かくデバッグしたところ、リソースビルドの際の CString s1; で宣言した変数のs1.GetAt(i)をとるところでおかしくなっているようです。MSDNではGetAt(int nIndex)について、「MFC ライブラリのデバッグ環境では nIndex の範囲が検証されますが、リリース環境では検証されません。」とありました。変な話です。質問の項目を変更してまた質問したいと思います。