小弟做的简单的说就是一个对话框加上打印功能,vc2008下debug没问题,也可以运行,但release编译是没问题,运行就出错,错误提示是"xxx.exe 中的 0x0041a9ce 处未处理的异常: 0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突"。下面是部分代码:
int CConstantTestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1; // TODO:  在此添加您专用的创建代码
CChildFrame* pFrame = new CChildFrame;
m_pChildFrame = pFrame; // create and load the frame with its resources
pFrame->LoadFrame(IDR_PRINTFRAME,WS_OVERLAPPED|WS_MINIMIZEBOX|WS_SYSMENU,NULL,NULL); m_pChildFrame->SetWindowText(_T("打印报表"));   //程序就停在这里
m_pChildFrame->SetIcon(m_hIcon, FALSE);         
m_pChildFrame->ShowWindow(SW_HIDE); m_pChildFrame->UpdateWindow();
return 0;
}局部变量里面可以看到“CChildFrame hWnd=0xfeeefeee”,知道是这个地方有问题,但是不明白,为什么release下就会错,各位小哥帮忙看看,我可以再加分的,谢谢!

解决方案 »

  1.   

    pFrame->LoadFrame(IDR_PRINTFRAME,WS_OVERLAPPED|WS_MINIMIZEBOX|WS_SYSMENU,NULL,NULL);
    ==应该是这里面有问题吧。局部变量里面可以看到“CChildFrame hWnd=0xfeeefeee”,
    ==这个你是指pFrame呢,还是m_pChildFrame呢?
      

  2.   

    LoadFrame失败了。看一下返回值,检查一下LastError,调试到LoadFrame中,看那句不行。一般可能是变量未初始化,或者消息机制不对等
      

  3.   

    SetWindowText是在窗口存在时才可以,而楼主的代码刚new CChildFrame,虽然类对象存在了,但窗口还有初始化,窗口还没有,所以不可以的。
      

  4.   

    谢谢鹦鹉哥
    刚刚没说清楚,调试到了winocc.cpp的这个部分错误
    void CWnd::SetWindowText(LPCTSTR lpszString)
    {
    ENSURE(this);
    ENSURE(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL)); if (m_pCtrlSite == NULL)
    ::SetWindowText(m_hWnd, lpszString);
    else
    m_pCtrlSite->SetWindowText(lpszString);   //最后停在这里
    }
    可以看得出来是m_pChildFrame->SetWindowText(_T("打印报表"))这里错了。。
    这个时候CChildFrame hWnd=0xfeeefeee,是pFrame。
      

  5.   

    我知道是这里最终出错。但根源不在这里啊。问题在于前面一句LoadFrame并没有成功,因此pFrame并没有生成m_hWnd,才导致这里的失败。明白么。
      

  6.   

    你调试call stack看看是哪个函数调用出错。
      

  7.   

    你的pFrame->LoadFrame() 语句有问题,调试一下
      

  8.   

    很奇怪的现象...在另一个程序当中,一样的语句,这回换成Debug下面不行了..还是同样的问题..确实是LoadFrame()有问题,但是不知道怎么解决...先结帖,回头慢慢研究...
      

  9.   

    推荐一个调试工具Tracer给大家,它是一个用于在Release后运行于真实环境下的应用软件的调试工具(当然也可调试Debug版本的)而无需VC++环境,它可以捕获应用软件的TRACE输出信息进行跟踪显示,同时还能对应用软件在运行时出现的异常崩溃进行源码级的定位,非常方便程序员快速定位并解决应用软件开发中的深度BUG。
      

  10.   

    有需要Tracer工具的朋友请email:[email protected]