wince环境下,单文档程序,使用了分割窗口类CSplitterWnd,
在需要显示的时候,出现这个错误,请问是怎么回事?
这个错误一般是在什么情况下出现的呢?
具体原因很难说!
一般是LZ的代码有问题,引起这个系统文件的错误。
引用: 引用楼主 xianzi123 的帖子:
wince环境下,单文档程序,使用了分割窗口类CSplitterWnd,
在需要显示的时候,出现这个错误,请问是怎么回事?
这个错误一般是在什么情况下出现的呢?
这个问题我刚刚遇到,已经找到原因解决。
请看我的博客http://blog.eeworld.net/gooogleman/archive/2008/12/25/3604188.aspx
good luck
问题还是没有解决:
出现问题的代码为:
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
}
不知道是怎么回事?哪位能给我解释下吗?是在是不知道哪里出错了
这种原因很多的,我也是碰巧遇到了。
估计你和我不一样。
CTrainView* pAnalog=(CTrainView*)m_wndSplitter2.GetPane(0,0);
改为:
CTrainView*pAnalog=(CTrainView*)((CMainFrame*)AfxGetMainWnd())->m_wndSplitter2->GetPane(0,0);
不知道怎么回事,现在这里
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,请问应该怎么样修改才好呢?
具体原因不好讲
建议还是重新建个工程把代码重新写一下
建议把自己的代码好好整理一下,所有申请/释放内存的地方都作个错误判断,然后变量定义的时候都给它赋一个初始化的值.这样至少可以保证自己的代码不会data abort