- ベストアンサー
Debug版とRelease版で結果が変わる
Visual Stadio 6.0 C++でDLLを作成した所、 Debug環境で行った結果とRelease環境で作成したDLLの実行結果が変わってしまいます。 この原因について何か思い当たる事がありましたら、教えて下さい。 宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 まぁ、それが理由であるかは断言は出来ませんが、VC6には末恐ろしいバグもあるご様子で・・・。 確かヘルプに、最適化をしておかしくなるケースと理由が記載されていた様な気がします。 後、関数内にStatic変数宣言が置かれていると、最適化でインライン展開された時、展開された個数分のStatic変数領域が出来上がります(本当は一つの筈なのだが)。 結果として、おかしくなります。 「プロジェクトの設定 → C/C++ → 最適化 → 関数のインライン展開の制御」で「適合可能なもの全て」が選択されている時には要注意です。 「VC6 最適化 バグ」 http://www.google.co.jp/search?hl=ja&q=VC6%E3%80%80%E6%9C%80%E9%81%A9%E5%8C%96%E3%80%80%E3%83%90%E3%82%B0&lr= 「VC6 サービスパック6」 http://www.microsoft.com/downloads/details.aspx?familyid=A8494EDB-2E89-4676-A16A-5C5477CB9713&displaylang=ja
その他の回答 (4)
- machongola
- ベストアンサー率60% (434/720)
失礼。誤字ってしまいました。 ×まぁ、それが理由であるかは断言は出来ませんが、VC6には末恐ろしいバグもあるご様子で・・・。 ○まぁ、これが理由であるかは断言は出来ませんが、VC6には末恐ろしいバグもあるご様子で・・・。
- koinobori7
- ベストアンサー率44% (8/18)
dllではありませんが、 最近、メモリーの初期化を忘れて ひどい目にあいました。 フフフフフフ のようになりました。 特に、strcpy() をつかっていて、コピー元のほうが 0で初期化されていると思っていたら フフフ… で初期化されていたので、 コピーしたとたんにスタック内のデータが 破壊されてしまいました。 初期化と文字列コピーのところを確認したら どうでしょうか?
お礼
回答ありがとうございました。 確かにプログラムの中でAllocやReallocをたくさん使っています。 その後に何かあるか、地道に調べてみます。
- jacta
- ベストアンサー率26% (845/3158)
未定義の動作や不定値に依存した実装になっている可能性があります。 そうであれば、プログラムのバグです。
お礼
回答ありがとうございました。 地道に調べてみます。
- LegaC2
- ベストアンサー率52% (224/428)
具体的に何がどう違うか判らないので、見当違いな回答かもしれませんが、通常、debug版とrelease版ではメモリの使い方が異なります。 そのため、初期化忘れにより結果が異なることが、たまにあります。 それ以上は、具体的なソースを見ない限り、指摘は難しいと思います。
お礼
回答ありがとうございました。 そうですよね。コードを見ないと分からないですよね。 あいまいな質問の仕方ですいませんでした。
お礼
回答ありがとうございました。 「最適化」が原因かどうか分かりませんが、今回の環境違いによる不具合の原因が分かりました。 ヒントとなる助言ありがとうございました。 ちなみに発生した部分としては、「#define」で円周率を定義していたのですが、その小数点のすごく小さな部分が丸められてしまい、その定義を使って条件分岐している箇所で、「else」側の方が処理されてしまい今回の結果となっていました。