ウィンドウプロシージャでブレークポイントが発生してしまいます

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
モイ

ウィンドウプロシージャでブレークポイントが発生してしまいます

#1

投稿記事 by モイ » 12年前

初めまして、こんばんわ。モイと言います。
今回始めて投稿させて頂きます。

環境は
Windows7
visual studio 2010
を使用しています。

c言語は基礎中の基礎、程度は一応・・・一通り習いました。
ですがそれ以外は殆どダメで、今回は恐らくウィンドウ関連で詰まってしまっているのですが。
ある貰ったプロジェクトを私の環境でデバッグすると

「Windows によって (プロジェクト名).exe でブレークポイントが発生しました。

ヒープが壊れていることが原因として考えられます。(プロジェクト名).exe または読み込まれた DLL にバグがあります。

あるいは、(プロジェクト名).exe がフォーカスを持っているときに、ユーザーが F12 キーを押したことが原因として考えられます。

可能であれば、出力ウィンドウに詳細な診断情報が表示されます。」


と出てしまいます・・・


これは私の書いたコードでは無いのですが、
WinMain.cpp

コード:

LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message){
	case WM_DESTROY: PostQuitMessage(0); return 0;
	case WM_KEYDOWN:
			switch (wParam){
			case VK_ESCAPE: PostMessage(hWnd, WM_CLOSE, 0, 0); return 0;
			}
			break;
    }
    return DefWindowProc(hWnd, message, wParam, lParam);
}
ここの12行目に緑色の矢印が出ていて
「このスレッドによって現在の関数が実行された後、次に実行されるステートメントです」
とありました。
ここでエラーがあるのか・・と思っているのですが、
凄く疑問なのが、「デバッグなしで開始」をすると
このエラーが回避されるのです。
あと、このコードを貰った環境だとエラーが起きません。
一応同じ環境を用意しているのですが・・・

私なりに調べた結果、
・削除したハンドルにアクセスしようとしたか
・2回ハンドルを削除しようとしたか
等しか想像できませんでした。

このエラーの原因と、解決するにはどのようにすれば良いか
皆様のお知恵をお貸しいただけると幸いです。

何か不適切な、不足な部分があればご指摘下さい。
長文、拙文失礼しました。

Rittai_3D
記事: 525
登録日時: 12年前

Re: ウィンドウプロシージャでブレークポイントが発生してしまいます

#2

投稿記事 by Rittai_3D » 12年前

はじめまして。3Dと申します。自分はDxlibを使っているので詳細はわかりませんが、10行目のbreak;を消して見てればいいと思います。

return で値を返したあとにbreakは必要無いと思います。

ただ、自分はウィンドウプロシージャどころかWin32APIもあまり使わないので見当違いならばすいません。
初心者です

モイ

Re: ウィンドウプロシージャでブレークポイントが発生してしまいます

#3

投稿記事 by モイ » 12年前

ご返信ありがとうございます。
10行目のbreak;を消して見てればいいと思います。
消してみたのですが、変化がありませんでした・・・
でもご指摘ありがとうございます。

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: ウィンドウプロシージャでブレークポイントが発生してしまいます

#4

投稿記事 by へにっくす » 12年前

モイ さんが書きました:これは私の書いたコードでは無いのですが、
WinMain.cpp
掲示されたWinMain.cppでは原因となる箇所を指摘できません。
デバッガで止まるからといって、そこに原因があるわけではありません。
結果としてそこで止まるわけですから、他のソースも見ないと分かりません。
たとえるなら検査もせず「ここが調子が悪いから直して」と言ってるようなものです。

なので、WinMain.cpp全部の掲示と、他のソースも掲示してください。
プロジェクトに含まれる拡張子が.h、.cppのファイルを掲示すればよいです。
ファイル数が多い場合は、zipにかためてアップロードでもよいでしょう。
モイ さんが書きました:あと、このコードを貰った環境だとエラーが起きません。
一応同じ環境を用意しているのですが・・・
同じ環境という根拠を示して下さい。Win32APIしか使っていないなら、Windowsであれば動くとは思いますが、掲示されたソースだけでは判断できません。
同じ環境のつもりでも、ライブラリのインストール状況が違えば、動作も変わります。
コンパネのプログラムの機能で表示される「現在インストールされているプログラム」を比べてみて、全く同じですか?
オフトピック
プログラムは、思った通りには動かない。記述した通りに動く。
出来るならでいいですが、デバッガで止まった時に、呼び出し履歴を表示させてみるとどうなってるでしょうか?
方法 : [呼び出し履歴] ウィンドウを使用する
これも掲示してみるといいかも(これも結果を表示してるだけなので、原因が分かるわけではありませんが)
written by へにっくす

モイ

Re: ウィンドウプロシージャでブレークポイントが発生してしまいます

#5

投稿記事 by モイ » 12年前

ご返事ありがとうございます。
やはりソースが足らないですよね、すいません。


WinMain.zip(4.0kb)
関連ソースコード

始めてアップロードしたので間違っていたら申し訳ないです。
お手漉きの時にでもよろしくおねがいします。


呼び出し履歴はこのような具合になっております。


ntdll.dll!77c58e88()
[下のフレームは間違っているか、または見つかりません。ntdll.dll に対して読み込まれたシンボルはありません。]
ntdll.dll!77c58ee4()
msctf.dll!76f9d16c()
msctf.dll!76f8be29()
msvcrt.dll!76273f21()
msvcrt.dll!76273eae()
ntdll.dll!77beb499()
ntdll.dll!77beb46b()
ntdll.dll!77beb40e()
ntdll.dll!77ba0133()
msctf.dll!76f7ff9e()
msctf.dll!76f7ff5f()
msctf.dll!76f873ef()
KernelBase.dll!756f58de()
msctf.dll!76f72b51()
msctf.dll!76f72d99()
msctf.dll!76f72d6d()
msctf.dll!76f72d41()
msctf.dll!76f74317()
msctf.dll!76f7fdcb()
baiduJPTip.dll!6f746144()
baiduJPTip.dll!6f761a5b()
baiduJPTip.dll!6f742e06()
baidujp3.dll!6aab3618()
baiduJPTip.dll!6f74f742()
msctf.dll!76f6664e()
msctf.dll!76f7dec9()
msctf.dll!76f653ee()
msctf.dll!76f6530c()
imm32.dll!757422e3()
user32.dll!75cdd9e7()
user32.dll!75cdadf9()
msctf.dll!76f63c3c()
uxtheme.dll!70869210()
user32.dll!75cd62fa()
user32.dll!75cd6d3a()
user32.dll!75cd6ce9()
user32.dll!75cd6de8()
user32.dll!75cd6e44()
ntdll.dll!77ba010a()
user32.dll!75cd72b9()
user32.dll!75cddacb()
user32.dll!75cdd048()
> 3DGame.exe!WindowProc(HWND__ * hWnd, unsigned int message, unsigned int wParam, long lParam) 行 51 C++
user32.dll!75cd62fa()
user32.dll!75cd6d3a()
user32.dll!75cd6ce9()
user32.dll!75cd6de8()
user32.dll!75cd6df3()
user32.dll!75cd6e44()
ntdll.dll!77ba010a()
user32.dll!75ce0e10()
3DGame.exe!InitWindow(HINSTANCE__ * hInstance, int nCmdShow) 行 85 C++
90900008()


私には何が起きているのかさっぱりです。
飛ぼうとしても「利用可能なソースがありません」と出てしまいます・・・
不足な部分があれば、またご指摘お願いします。

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: ウィンドウプロシージャでブレークポイントが発生してしまいます

#6

投稿記事 by へにっくす » 12年前

ソースを見るとd3dx9.hをインクルードしてて、IDirect3DDevice9*を外部宣言してることからDirectX9を使用していますね。
Windows7だとDirectX 11はインストールされてるけど9とは別物らしいので、以下のリンクからインストーラをダウンロードして、エラーが起きるPCで実行しましょう。
DirectX エンド ユーザー ランタイム Web インストーラ
参考)
DirectX に関してよく寄せられる質問

あ、でもデバッグなしで開始すると問題なく動くんですよね。確かに変だな。えっと、、、コンパイルして実行してみたんですよね?
ならDirectX SDKも入ってるはずかなあと思うんだけど。ライブラリが古いのかな?
とりあえずUS版だけどたぶん最新のDirectX SDK。デバッグするには必要ですので再インストール(?)してみてください。
DirectX Software Development Kit(Version 9.29.1962)
もちろんインクルードなど環境周りもチェックしてね。
written by へにっくす

閉鎖

“C言語何でも質問掲示板” へ戻る