久しぶりの質問です。
環境は、Win2000 Pro(SP2),VC++6.0(SP5),MFCです。
現象は、ダイアログで作成したプログラムがありまして、キャンセル(IDCANCEL)ボタンをクリ
ックしてプログラムを終了させるものなのですが、今まで、Debug版では全く問題がなかったの
に、Release版で実行してみると、
「0x0000000a の命令が 0x0000000a のメモリを参照しました。メモリが read になる
ことはできませんでした。」というメッセージが表示されて落ちてしまいます。
メッセージボックスを使って調べてみたところ、
InitInstance内の else if (nResponse == IDCANCEL) のところにメッセージボックスを入
れ、ExitInstance内にもメッセージボックスを入れているのですが、
ExitInstanceに来る前に落ちているみたいなのです。
原因、解決方法、調査方法など、どんな情報でもいいので、教えてください。
よろしくお願いします。
メモリ破壊などが考えられますね。
クリリンさん こんにちは。
昨日は、お返事ありがとうございます。
いつも聞いてばかりなので、ハズレかも知れませんが、たまにはお返事を書いてみます。
初期化していない変数などがあると、思わぬことになる場合があるそうです。
お役に立てればうれしいです。(^-^;
Puppy@(給料日 && 笑) && (残業中 && 涙) でした。
とおりすがりさん、Puppyさん、レスありがとうございます。
原因はわかりませんが、解決はしました。
else if (nResponse == IDCANCEL)
{
m_pMainWnd = NULL;
}
として、メインウィンドウのハンドルを開放する事で落ちなくなりました。
しかし、他のプログラムでは全く問題がなかったのですがねぇ・・・
とりあえず、解決にしておきます。
でも、原因が知りたい・・・
記事を書いてる最中に解決しちゃったみたいですが、もったいないので書き込みます(^^;
リリースビルドでデバッグする方法があります。
プロジェクトの設定ダイアログで
C/C++タブ カテゴリ:一般
デバッグ情報 → プログラムデータベースを使用
最適化 → 無効(デバッグ時)
リンクタブ カテゴリ:一般
デバッグ情報を生成するチェックボックス → オン
これでリリースビルドでもブレイクポイントが有効になります。
ステップ実行もできます。
クリリンさん、こんにちは。
僕も、Puppyさんと一緒で、いつも聞いてばかりで申し訳なかったのですが、今回は少しわかり
そうだったのでお返事を書いて見ました。
どうやら、ヒープレイアウトが原因のようです。ヒープ レイアウトは、アプリケーションがデ
バッグでは動作しても、リリースではエラーが発生する原因の約 90% を占めるそうです。
以下のサイトが参考になるかもしれません。
http://www.microsoft.com/japan/developer/library/vccore/_core_common_problems_sw
itching_from_debug_to_release_build.htm
また、MSDNで「ヒープレイアウト」で検索しても同様の説明が得れると思います。
お役に立てれば幸いです。
アドレスが切れちゃってます。もう一度張りなおしてみます。
http://www.microsoft.com/japan/developer/library/vccore/_core_common_problems_sw
itching_from_debug_to_release_build.htm
やっぱりだめです。
EIJIさん、はまちさん どうもありがとうございます。
今後の開発に生かしたいと思います。