Debug Assertion Failed! 我用VC++编程,运行时点击菜单选项报错。
来源:百度知道 编辑:UC知道 时间:2024/06/30 05:08:53
Debug Assertion Failed!
Program:d\aaa\debug\aaa.exe
File:wincore.cpp
Line:312
For information on how your program can cause an assertion failure,see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
点击Retry后,程序关闭,系统报错误。
请问是何原因?谢谢!
可以跟踪到 mfc提供的源代码内部,(注:如果打开了mfc源代码,设置了断点,但是跟不进去,那就需要更新PDB文件,具体网上搜)
打开 wincore.cpp文件(D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\src\mfc)。查看 312 行,所在函数如下:
CWnd* PASCAL CWnd::FromHandle(HWND hWnd)
{
CHandleMap* pMap = afxMapHWND(TRUE); //create map if not exist
ASSERT(pMap != NULL);
CWnd* pWnd = (CWnd*)pMap->FromHandle(hWnd);
#ifndef _AFX_NO_OCC_SUPPORT
pWnd->AttachControlSite(pMap);
#endif
ASSERT(pWnd == NULL || pWnd->m_hWnd == hWnd);
return pWnd;
}
断言就是 Assert( pWnd == NULL || pWnd->m_hwnd == hWnd );也就是读取句柄映射表错误,有2种可能:
1你传入的窗口句柄为空,也就是生成了窗口对象但是没有使用 Create创建窗口。
2.窗口所在线程不是当前所在线程,那么使用FromHandle读取映射窗口指针或者映射临时窗口指针必然会出错。窗口都是线程相关的噢
你点击菜单命令出错,你就有可能你的菜单命令执行的代码有 FromHandle语句,你看看,一定就是它
200分啊,还有不明白的问我吧,一定要把分给我
代码贴出来,才好帮你分析,这种情况一般是代码的逻辑错误,Debug Assertion Failed!是因为,vc在debug版的代码中插入了很多帮助调试的代码,包括检查esp等,就是在函数调用的前后检查esp是否相同,不同的话,就d