在一个文件中定义:CDialog *showDlg;void ShowResult(CDialog& dlg)
{
    showDlg = &dlg;
    dlg.UpdateData(false);// (1)
}void A()
{
    showDlg->UpdateData(false); //(2)
}
主窗口中调用ShowResult(*this); 结果在(1)句处正常,(2)句处
debug assertion failed! 这是为什么?

解决方案 »

  1.   

    主窗口中调用ShowResult(*this); 结果在(1)句处正常,(2)句处
    ShowResult并没直接调A,怎么会执行到(2)?A处加ASSERT_VAILD(showDlg)断言下什么问题
      

  2.   

    很显然dlg是本地变量,主窗口中调用ShowResult(*this)时,(1)句由于使用的是dlg指针,dlg是函数的参数,所以(1)句正常,而(2)句,虽然CDialog *showDlg指针已经在(1)句被赋值,但由于dlg是本地变量,在出了ShowResult函数之后,该值已经为空了!楼主没有把作用域弄清楚!!!
      

  3.   

    如果(2)句在(1)句运行之后运行而且dlg没有被关闭应该不会出错啊
      

  4.   

    showDlg还没被实例化啊,指针指向一个不确定的内存地址
      

  5.   

    CDialog *showDlg = NULL;void ShowResult(CDialog* dlg)
    {
        showDlg = dlg;
        dlg->UpdateData(false);// (1)
    }void A()
    {
        if (showDlg)
            showDlg->UpdateData(false); //(2)
    }
    主窗口中调用ShowResult(this);