我的程序是用EndDialog()退出的,片段大概如下:
UINT myThread()//些为全局函数
{
   ......
   myDlg->m_pLog = new CLog(...);
   myDlg->EndDialog();
   return true;
}
但执行一段时间后会报错提示某个地址不能读或不能写,于是我把其中一个new了的指针delete了,是在自己重写的EndDialog()里面释放的:
void CMyDlg::EndDialog(int nResult)
{
    CDialog::EndDialog(nResult);//这句放这里还是放最后面好呢?
    LogMsg("EndDialog()"); //此会用到下面释放的指针
     if(m_pLog != NULL) //m_pLog 是个CLog类的指针,作为CMyDlg的数据成员,记录日记用的
     {
        delete m_pLog;
        m_pLog = NULL; 
    }
    return;
}//(我在另一个程序里发现有这种用法但没出错,于是就试写重写EndDialog()了)但运行一段时间后还是出现像如下错误提示:
The instruction at "0x7c82f56b" referenced memory at "0x000000".The memory could not be read.或是:The instruction at "0x0016b0b8" referenced memory at "0x0016b0b8".The memory could not be written.
程序就此停了(我是在SQL Server的Job里运行的),但写完了所有日记。于是我加上onDestroy(),但却写了onDestroy()它里面的日记,而EndDialog(int nResult)里的LogMsg()却没有写上。
void CMyDlg::OnDestroy()
{
  CDialog::OnDestroy();//放这还是放后面好呢?
   LogMsg("onDestroy()");
  if(m_pLog != NULL)
   {
       delete m_pLog;
       m_pLog = NULL; 
   }
}我想请问大家,像这种情况怎么处理这些指针的释放?应该放在哪个位置,onDestroy()和EndDialog()两个在执行上有什么关系呢?我查过MSDN但没查到这些,请各位指教。