Release版で落ちます。

[戻る]
クリリン 2002/05/24(金) 18:16:26
久しぶりの質問です。
環境は、Win2000 Pro(SP2),VC++6.0(SP5),MFCです。

現象は、ダイアログで作成したプログラムがありまして、キャンセル(IDCANCEL)ボタンをクリ
ックしてプログラムを終了させるものなのですが、今まで、Debug版では全く問題がなかったの
に、Release版で実行してみると、
「"0x0000000a" の命令が "0x0000000a" のメモリを参照しました。メモリが "read" になる
ことはできませんでした。」というメッセージが表示されて落ちてしまいます。

メッセージボックスを使って調べてみたところ、
InitInstance内の else if (nResponse == IDCANCEL) のところにメッセージボックスを入
れ、ExitInstance内にもメッセージボックスを入れているのですが、
ExitInstanceに来る前に落ちているみたいなのです。


原因、解決方法、調査方法など、どんな情報でもいいので、教えてください。
よろしくお願いします。

とおりすがり 2002/05/24(金) 18:22:30
メモリ破壊などが考えられますね。

Puppy 2002/05/24(金) 18:24:23
クリリンさん こんにちは。

昨日は、お返事ありがとうございます。
いつも聞いてばかりなので、ハズレかも知れませんが、たまにはお返事を書いてみます。

初期化していない変数などがあると、思わぬことになる場合があるそうです。
お役に立てればうれしいです。(^-^;

 Puppy@(給料日 && 笑) && (残業中 && 涙) でした。

クリリン 2002/05/24(金) 18:47:00
[[解決]]
とおりすがりさん、Puppyさん、レスありがとうございます。

原因はわかりませんが、解決はしました。
else if (nResponse == IDCANCEL)
{
  m_pMainWnd = NULL;
}
として、メインウィンドウのハンドルを開放する事で落ちなくなりました。
しかし、他のプログラムでは全く問題がなかったのですがねぇ・・・
とりあえず、解決にしておきます。
でも、原因が知りたい・・・

EIJI 2002/05/24(金) 19:01:56
記事を書いてる最中に解決しちゃったみたいですが、もったいないので書き込みます(^^;

リリースビルドでデバッグする方法があります。
プロジェクトの設定ダイアログで
C/C++タブ カテゴリ:一般
 デバッグ情報 → プログラムデータベースを使用
 最適化 → 無効(デバッグ時)
リンクタブ カテゴリ:一般
 デバッグ情報を生成するチェックボックス → オン

これでリリースビルドでもブレイクポイントが有効になります。
ステップ実行もできます。

はまち 2002/05/25(土) 07:53:38
クリリンさん、こんにちは。
僕も、Puppyさんと一緒で、いつも聞いてばかりで申し訳なかったのですが、今回は少しわかり
そうだったのでお返事を書いて見ました。

どうやら、ヒープレイアウトが原因のようです。ヒープ レイアウトは、アプリケーションがデ
バッグでは動作しても、リリースではエラーが発生する原因の約 90% を占めるそうです。

以下のサイトが参考になるかもしれません。

http://www.microsoft.com/japan/developer/library/vccore/_core_common_problems_sw
itching_from_debug_to_release_build.htm

また、MSDNで「ヒープレイアウト」で検索しても同様の説明が得れると思います。

お役に立てれば幸いです。

はまち 2002/05/25(土) 11:05:32
アドレスが切れちゃってます。もう一度張りなおしてみます。

http://www.microsoft.com/japan/developer/library/vccore/_core_common_problems_sw
itching_from_debug_to_release_build.htm

はまち 2002/05/25(土) 11:06:57
やっぱりだめです。

クリリン 2002/05/25(土) 18:05:02
EIJIさん、はまちさん どうもありがとうございます。
今後の開発に生かしたいと思います。

古いスレッドには追加発言できません。