的程序在debug版本下编译 运行都没有问题 ,可是release后编译没有问题 运行的时候说xx指令xx内存不能为read。我定位了一下,发现是这个函数里面这句话有问题:
void CMainFrame::OnDataReady()
{
CMainFrame* pMFrm=(CMainFrame*)AfxGetMainWnd();CView * pView=(CView*)pMFrm->GetActiveView();
pView->PostMessage(WM_REFRESH2,0,0);//有问题
}
其中
WM_REFRESH2是我自己定义的消息 我在MainFrame里面把消息转发给自己的VIEW 不知道为什么release 下会出错,我把他开始赋了个NULL的初值 也没用。求解!!!!!!!!!!!!!
因为release 下不知道怎么调 所以我是这样看的:用AfxMessageBox插对话框进去,结果插到这句话前面显示了对话框 查到后面不了我想要的对话框 我把这个消息删除掉,没有错误 。所以我认为是这个消息的错。可我debug下一点问题都没有。所以无解。我这个消息因为是框架类发给视图类的,所以我框架类的头文件定义了一下,视图类的头文件也定义了一下,难道是因为这个?可是debug 为什么没错?
void CMainFrame::OnDataReady()
{
CMainFrame* pMFrm=(CMainFrame*)AfxGetMainWnd();CView * pView=(CView*)pMFrm->GetActiveView();
pView->PostMessage(WM_REFRESH2,0,0);//有问题
}
其中
WM_REFRESH2是我自己定义的消息 我在MainFrame里面把消息转发给自己的VIEW 不知道为什么release 下会出错,我把他开始赋了个NULL的初值 也没用。求解!!!!!!!!!!!!!
因为release 下不知道怎么调 所以我是这样看的:用AfxMessageBox插对话框进去,结果插到这句话前面显示了对话框 查到后面不了我想要的对话框 我把这个消息删除掉,没有错误 。所以我认为是这个消息的错。可我debug下一点问题都没有。所以无解。我这个消息因为是框架类发给视图类的,所以我框架类的头文件定义了一下,视图类的头文件也定义了一下,难道是因为这个?可是debug 为什么没错?
我现在不在框架类把消息再转发一次了 我直接获得CMYVIEW的指针,在框架类里面画图:现在的问题很奇怪:
void CMainFrame::OnDataReady()
{ AfxMessageBox("a"); //把这句话删掉,release下就会出错
CMainFrame* pMFrm=(CMainFrame*)AfxGetMainWnd();
CKbView * pView=(CKbView*)pMFrm->GetActiveView();
。
}
好像AfxMessageBox()有触发消息循环的功能,为什么这里删掉就会出错?求解
至于访问越界问题本身,可能需要跟踪每个变量的内存发生的变化,需要在内存中找到每个被写入的单元,看看是不是写到非法的单元中去我估计是你修改了CDocument或者CMainFrame类的某个成员变量,破坏了保存view列表的那个数据结构
一定要写成: afx_msg void OnDataReady(WPARAM wParam, LPARAM lParam);
不能写成: afx_msg void OnDataReady();
函数体要写成:void CMainFrame::OnDataReady(WPARAM wParam, LPARAM lParam)
{
CKbView * pView=(CKbView*)(this->GetActiveView());
。。
}
虽然我自己在postmessage 的时候已经把两个参数置零了,不过debug下你可以写成我原来那个样子,release下一定要把两个参数仍然写出来。就是这个问题!
谢谢大家。