Debug Assertion Failed! 我用VC++编程,运行时点击菜单选项报错。

来源:百度知道 编辑:UC知道 时间:2024/06/30 05:08:53
我用VC++编了一个程序,该程序运行后,在点击某菜单选项时出现以下错误:

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