我用集合类保存数据对象,代码如下:
void CSerialPortDlgDlg::DataDecode(CString &strCheckedToDecode)
{
...

CVeloInfo *pVeloInfo = new CVeloInfo(atof(strTemp1), atof(strTemp2)); m_obAryVeloInfo.Add(pVeloInfo);  //m_obAryVeloInfo为CObArray对象;//  delete pVeloInfo;
//  pVeloInfo = NULL;
}下面这两行
  delete pVeloInfo;
  pVeloInfo = NULL;
如果我不注释起来程序就报错,为什么了,不都Add了吗?
再则,由于DataDecode()函数经常被调用,new分配的内存不释放应该不行吧,我注释起来可以运行,但没有长时运行。
望高手指教~

解决方案 »

  1.   

    m_obAryVeloInfo Add 后delete 报错,应该是有地方会去m_obAryVeloInfo里面的对象来用,因为你Add的指针并且销毁了,所以报错了, 应该在m_obAryVeloInfo被用完了的时候,在调用delete方法new的对象
      

  2.   

    我后面保存数据时用到obAryVeloInfo,
    CFile file(fileSaveDlg.GetFileName(), CFile::modeCreate | CFile::modeWrite);
    CArchive ar(&file, CArchive::store);
    m_obAryVeloInfo.Serialize(ar);
    我以为m_obAryVeloInfo Add 后自己会另分配内存
    但是我用完以后,也就是我保存的时候,已经new了很多次了,请问应该怎么delete呢?
     
      

  3.   

    笨办法,在m_obAryVeloInfo 销毁的时候,使用一个循环,把m_obAryVeloInfo 中的对象指针删除。然后在delete 掉m_obAryVeloInfo 对象
      

  4.   

    m_obAryVeloInfo 在程序中不是new的,所以我以为对话框会自动销毁,但是在postncmessage中还能引用到这个变量,所以感谢immigrator的帮助。