プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。
VC++.netで暗号化ソフトを作っているんですが、デバッグモードで実行した結果と、リリースモードで実行して得られる結果が違うので困っています。
原因としては、何が考えられるでしょうか?

warningで、「warning C4267: '=' : 'size_t' から 'int' に変換しました。データが失われているかもしれません。」と表示されましたが、(int)でキャストしてから警告は出なくはなっているんですが。

もう一つ、「LINK : warning LNK4089: 'SHELL32.dll' へのすべての参照は /OPT:REF によって廃棄されます。」と出ていますが、これは関係なさそうですので無視しています。

もしかして、同じような経験をされた方がいるんではないかと思い質問しました。
よろしくお願いします。

A 回答 (2件)

値を初期化しないで使用した時に、この現象が発生する可能性が高いです。


例えば、関数のなかで、int a;と変数を動的変数として宣言し、このaを初期化せずに、
int b = a*a;
を実行した場合、デバッグモードの場合は、0になる可能性が高く、リリースモードの場合は、不定(前回のスタック領域で使用された値)になります。

この回答への補足

回答ありがとうございます。その可能性もありそうです。プログラム自体はWEBから探してきたものですので、これから自力でチェックしてみようと思います。

補足日時:2006/05/07 12:41
    • good
    • 0

assertのなかで副作用のある処理をすると問題が生じるような気がします。

例えば、assert(++foo>0)など。

この回答への補足

細かくデバッグしたところ、リソースビルドの際の
CString s1;
で宣言した変数のs1.GetAt(i)をとるところでおかしくなっているようです。MSDNではGetAt(int nIndex)について、「MFC ライブラリのデバッグ環境では nIndex の範囲が検証されますが、リリース環境では検証されません。」とありました。変な話です。質問の項目を変更してまた質問したいと思います。

補足日時:2006/05/07 19:25
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!