class CMyApp : public CWinApp
{
//...
public:
CObArray m_arrBlock;
};void CMyApp::InitInstance()
{
//...
// CBlock 为自定义的类
this->m_arrBlock.Add( (CObject*)(new CBlock(/* 数个参数,此处省略*/)));
this->m_arrBlock.Add( (CObject*)(new CBlock(/* 数个参数,此处省略*/)));
//...
}编译成功,但结束应用程序时,提示 new CBlock 时内存泄露。
于是我加上:int CMyApp::ExitInstance()
{
for (int i=0; i<this->m_arrBlock.GetSize(); i++)
{
delete this->m_arrBlock[i];
}
}编译成功,但结束应用程序时,提示执行到 delete this->m_arrBlock[i]; 一句时,访问冲突。

解决方案 »

  1.   

    int CMyApp::ExitInstance()
    {
    for (int i=this->m_arrBlock.GetSize(); i>=0; i--)
    {
    delete this->m_arrBlock[i];
    }
             this->m_arrBlock.RemoveAll();
    }
      

  2.   

    你的程序似乎没有什么问题,我刚才试了一下,没发现错误,你看一下是不是按照这样的代码
    int CTzg005App::ExitInstance() 
    {
    // TODO: Add your specialized code here and/or call the base class
    for (int i=0; i<this->m_arrBlock.GetSize(); i++)
    {
    delete this->m_arrBlock[i];
    }
    this->m_arrBlock.RemoveAll();
    return CWinApp::ExitInstance();
    }
      

  3.   

    我觉得可能是你在其他地方释放过CBlock
      

  4.   

    this->m_arrBlock.RemoveAll();
    这个不加不会泄漏内存吧?