assertion failed :"File wincore.cpp ,ine 1051"是什么错误?

xiangzi   2008-12-25 15:14 楼主
wince环境下,单文档程序,使用了分割窗口类CSplitterWnd,
在需要显示的时候,出现这个错误,请问是怎么回事?
这个错误一般是在什么情况下出现的呢?

回复评论 (10)

具体原因很难说!

一般是LZ的代码有问题,引起这个系统文件的错误。
点赞  2008-12-25 16:02
引用: 引用楼主 xianzi123 的帖子:
wince环境下,单文档程序,使用了分割窗口类CSplitterWnd,
在需要显示的时候,出现这个错误,请问是怎么回事?
这个错误一般是在什么情况下出现的呢?


这个问题我刚刚遇到,已经找到原因解决。
请看我的博客http://blog.eeworld.net/gooogleman/archive/2008/12/25/3604188.aspx
good luck
点赞  2008-12-25 16:18
多看代码,分析MAP文件
点赞  2008-12-25 17:08
问题还是没有解决:
  出现问题的代码为:
         CTrainView* pAnalog=(CTrainView*)m_wndSplitter2.GetPane(0,0);
        CDigitalView* pDigital=(CDigitalView*)m_wndSplitter2.GetPane(0,1);
        CChartView* pChart=(CChartView*)m_wndSplitter1.GetPane(1,0);
  上述三个类是View类的子类。当运行到第一句话时就出现这个错误,F11跟进去,
  在CWnd* CSplitterWnd::GetPane(int row, int col) const函数里的ASSERT_VALID(this);出现该错误,继续跟进去,是这里发生错误。
        if (!AfxIsValidAddress(pOb, sizeof(CObject)))
        {
                TRACE0("ASSERT_VALID fails with illegal pointer.\n");
                if (AfxAssertFailedLine(lpszFileName, nLine))
                        AfxDebugBreak();
                return;     // quick escape
        }
  不知道是怎么回事?哪位能给我解释下吗?是在是不知道哪里出错了
点赞  2008-12-30 11:07
引用: 引用 4 楼 xianzi123 的回复:
if (!AfxIsValidAddress(pOb, sizeof(CObject)))
{
TRACE0("ASSERT_VALID fails with illegal pointer.\n"); if (AfxAssertFailedLine(lpszFileName, nLine))
AfxDebugBreak();
return;    // quick escape
}



已经告诉你非法指针了!!!
肯定是你分配内存、申请空间出错了。。。
点赞  2008-12-30 11:13
这种原因很多的,我也是碰巧遇到了。
估计你和我不一样。
点赞  2008-12-30 11:25
CTrainView* pAnalog=(CTrainView*)m_wndSplitter2.GetPane(0,0);
改为:
CTrainView*pAnalog=(CTrainView*)((CMainFrame*)AfxGetMainWnd())->m_wndSplitter2->GetPane(0,0);
点赞  2008-12-30 11:38
不知道怎么回事,现在这里
if (!AfxIsValidAddress(pOb, sizeof(CObject)))
{
TRACE0("ASSERT_VALID fails with illegal pointer.\n"); if (AfxAssertFailedLine(lpszFileName, nLine))
AfxDebugBreak();
return;    // quick escape
}
没有问题了,我什么都没有改动。
出现的问题变为:
void CWnd::AssertValid() const函数中的
                   CObject* p;
                ASSERT((p = pMap->LookupPermanent(m_hWnd)) != NULL ||
                        (p = pMap->LookupTemporary(m_hWnd)) != NULL);


调试信息中显示m_hwnd是unused,请问应该怎么样修改才好呢?
点赞  2008-12-30 14:53
具体原因不好讲
建议还是重新建个工程把代码重新写一下
点赞  2008-12-30 17:11
建议把自己的代码好好整理一下,所有申请/释放内存的地方都作个错误判断,然后变量定义的时候都给它赋一个初始化的值.这样至少可以保证自己的代码不会data abort
点赞  2008-12-31 10:02
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复