私はVS2010でC++ Win32プログラムをデバッグしていますが、「Windowsはprogram.exeにブレークポイントをトリガしました」というメッセージが表示されます。Windowsがブレークポイントを生成しました
コードを二重チェック、三重チェック、四回チェックしました。私は何か起こっている必要があります見つけることができません。しかし、毎回同じ場所で起こるので、何かがあるはずです。
コンストラクタ、デストラクタ、ウィンドウメッセージ、メモリ割り当てと割り当て解除などかなりのコードが含まれていますので、具体的な記述は非常に難しいですが、あなたは説明をするために本当に多くのことをすることはできません。
基本的にボタンをクリックすると、画像を示すウィンドウが表示されます。特定の条件が満たされた場合、私はそのウィンドウにWM_DESTROY
を送り、Release()
を私のLPPICTURE
に呼び出すデストラクタをトリガする変数を削除し、解放された変数はNULL
に設定されます。
次に、ユーザーがボタンを再度クリックすると、以前に行ったのと全く同じ方法で新しいインスタンスを動的に割り当てようとするため、ブレークポイントが生成されます。 AFAIK(と私は1時間以上これをデバッグしようとしてきました)、コンストラクタは起動しません。これは、動的メモリ割り当てのためのnew()
関数の中で壊れているようです。
は、私の知る限り、それは私がVS2010の外でexeファイルを実行すると、すべてが正常続けていることは何奇妙なライン54または
malloc.cあるreturn HeapAlloc(_crtheap, 0, size ? size : 1);
に壊れます。プログラムはクラッシュしませんし、期待どおりに動作し続けます!
+1これは非常にうまくいく可能性があります。ウィンドウが偽の 'WM_DESTROY'を処理した後、ウィンドウが本当に適切に破壊されたときに別のウィンドウを取得する可能性があります。 @Ozzah 'WM_DESTROY'を生成しないでください。システムがそれを生成し、それを処理します。 –
関連リンク:http://blogs.msdn.com/b/oldnewthing/archive/2011/09/26/10216420.aspx –
コードをチェックして、私は 'WM_DESTROY'を送信していません。私は' DestroyWindow (HWND) 'と呼ばれます。私はそれが難しいことを認識していますが、おそらく関連性の高いコードがたくさんあります。私はそれをもう一度長く見直して、私がそれを突き止めることができるかどうかを見ます。 – Ozzah