Windows已生成断点

Ozz*_*zah 2 c++ winapi visual-studio-2010

我在VS2010中调试我的C++ Win32程序,我总是得到"Windows在program.exe中触发了一个断点".

我对代码进行了双重检查,三重检查和四重检查.我找不到应该发生的任何理由.但它每次都发生在同一点,所以必须有一些东西.

涉及相当多的代码(构造函数,析构函数,窗口消息,内存分配和释放等等),所以在这里放置一些具体内容非常困难,但与此同时我明白,如果没有代码,你可以'我真的做了很多解释.

基本上在点击按钮时,会显示一个显示图像的窗口.如果满足某个条件,我发送一个WM_DESTROY窗口并删除触发析构函数的变量,该析构函数调用Release()my LPPICTURE,并将释放的变量设置为NULL.

然后,当用户再次单击该按钮时,它会尝试动态分配一个新实例(与之前完全相同),这就是生成断点的地方.AFAIK(我一直试图调试这个超过一个小时),构造函数甚至没有启动.它似乎打破new()了动态内存分配的功能.

据我所知,它突破了return HeapAlloc(_crtheap, 0, size ? size : 1);第54行或malloc.c

奇怪的是,当我在VS2010之外运行exe时,一切都继续正常.该程序不会崩溃,并继续按预期工作!

cbr*_*nch 6

没有看到代码就很难诊断,但根据你的描述,它听起来像堆腐败.我的猜测是HeapAlloc检测到损坏并生成一个int 3本质上会在调试器中触发断点的地方.我的建议是检查所有对象分配/解除分配,并确保您没有踩到尚未分配的内存(或已经被释放的内存).

此外,您提到您正在WM_DESTROY明确发送消息.通常,您希望让Windows WM_DESTROY为您生成消息,可以通过呼叫DestroyWindow,也可以发送WM_CLOSE到窗口并为您DefWindowProc打电话DestroyWindow.这可能与您的问题无关,但仅限于FYI.