我在VS2010中调试我的C++ Win32程序,并且总是得到“Windows在program.exe中触发了一个断点”。Windows已经生成了一个断点
我已经重复检查,三重检查和四重检查代码。我找不到任何它应该发生的原因。但它每次都发生在同一个点上,所以一定有什么东西。有很多涉及的代码(构造函数,析构函数,窗口消息,内存分配和释放等等),所以很难在这里放置具体的东西,但是同时我明白没有代码你真的不能做太多的解释。
基本上只需点击一个按钮,就会显示一个显示图像的窗口。如果满足某个条件,我发送一个WM_DESTROY
到该窗口并删除触发析构函数的变量,该函数在我的LPPICTURE
上调用Release()
,并将释放的变量设置为NULL
。
然后,当用户再次点击该按钮,它会尝试动态分配一个新的实例(在以前一样完全相同的方式),这就是产生断点的位置。 AFAIK(我一直试图调试这个超过一个小时),构造函数甚至没有启动。它似乎正在破坏动态内存分配的new()
函数。
据我所知道的,它打破了上return HeapAlloc(_crtheap, 0, size ? size : 1);
这是行54或malloc.c
什么奇怪的是,当我运行exe VS2010之外,一切都将继续正常。该程序不会崩溃,并继续按预期工作!
+1这可能很好。在窗口处理假WM_DESTROY后,当窗口被正确销毁时,它很可能会得到另一个窗口。 @Ozzah永远不要生成'WM_DESTROY'。系统生成它并处理它。 –
相关链接:http://blogs.msdn.com/b/oldnewthing/archive/2011/09/26/10216420.aspx –
我检查了我的代码,我没有发送'WM_DESTROY',我打电话给'DestroyWindow (HWND)'。我意识到这很困难,但确实有很多可能相关的代码。我会再一次长时间仔细地看一遍,看看我能不能指出它。 – Ozzah