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

Visual Stadio 6.0 C++でDLLを作成した所、
Debug環境で行った結果とRelease環境で作成したDLLの実行結果が変わってしまいます。
この原因について何か思い当たる事がありましたら、教えて下さい。
宜しくお願いします。

A 回答 (5件)

 こんばんは。



 まぁ、それが理由であるかは断言は出来ませんが、VC6には末恐ろしいバグもあるご様子で・・・。
 確かヘルプに、最適化をしておかしくなるケースと理由が記載されていた様な気がします。

 後、関数内にStatic変数宣言が置かれていると、最適化でインライン展開された時、展開された個数分のStatic変数領域が出来上がります(本当は一つの筈なのだが)。
 結果として、おかしくなります。
 「プロジェクトの設定 → C/C++ → 最適化 → 関数のインライン展開の制御」で「適合可能なもの全て」が選択されている時には要注意です。

 「VC6 最適化 バグ」
 http://www.google.co.jp/search?hl=ja&q=VC6%E3%80 …

 「VC6 サービスパック6」
 http://www.microsoft.com/downloads/details.aspx? …
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
「最適化」が原因かどうか分かりませんが、今回の環境違いによる不具合の原因が分かりました。
ヒントとなる助言ありがとうございました。
ちなみに発生した部分としては、「#define」で円周率を定義していたのですが、その小数点のすごく小さな部分が丸められてしまい、その定義を使って条件分岐している箇所で、「else」側の方が処理されてしまい今回の結果となっていました。

お礼日時:2008/10/17 18:58

 失礼。

誤字ってしまいました。
 ×まぁ、それが理由であるかは断言は出来ませんが、VC6には末恐ろしいバグもあるご様子で・・・。
 ○まぁ、これが理由であるかは断言は出来ませんが、VC6には末恐ろしいバグもあるご様子で・・・。
    • good
    • 0

dllではありませんが、


最近、メモリーの初期化を忘れて
ひどい目にあいました。
 フフフフフフ
のようになりました。
 特に、strcpy()
をつかっていて、コピー元のほうが
0で初期化されていると思っていたら
フフフ…
で初期化されていたので、
コピーしたとたんにスタック内のデータが
破壊されてしまいました。
初期化と文字列コピーのところを確認したら
どうでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
確かにプログラムの中でAllocやReallocをたくさん使っています。
その後に何かあるか、地道に調べてみます。

お礼日時:2008/10/17 18:51

未定義の動作や不定値に依存した実装になっている可能性があります。


そうであれば、プログラムのバグです。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
地道に調べてみます。

お礼日時:2008/10/17 18:49

具体的に何がどう違うか判らないので、見当違いな回答かもしれませんが、通常、debug版とrelease版ではメモリの使い方が異なります。


そのため、初期化忘れにより結果が異なることが、たまにあります。

それ以上は、具体的なソースを見ない限り、指摘は難しいと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
そうですよね。コードを見ないと分からないですよね。
あいまいな質問の仕方ですいませんでした。

お礼日時:2008/10/17 18:48

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