CPtrArray m_arrItems;pitem = new MYITEM;
m_arrItems.Add(pitem);
pitem = new MYITEM;
m_arrItems.Add(pitem);
pitem = new MYITEM;
m_arrItems.Add(pitem);
最后我用:
for(int i=0; i<m_arrItems.GetCount(); i++)
{
 pitem = (PMYITEM)m_arrItems.GetAt(i);
 delete[] pitem; // 也试过delete pitem;  结果运行到这里时会报错.
}
m_arrItems.RemoveAll();
而我不用delete就直接RemoveAll的话运行是没问题的,在论坛上看到有人说手工new的就需要手工delete.如果不是上面那样
delete该如何手工删除呢?

解决方案 »

  1.   

    你的代码没问题,把MYITEM改为int试试,如果没问题,则肯定是MYITEM的问题。
      

  2.   

    难道CPtrArray不支持结构体指针吗?MYSTRUCT中都是基本类型.
      

  3.   

    删除肯定是要删除的,最好这么判断吧
    pitem   =   (PMYITEM)m_arrItems.GetAt(i); 
    if(pitem !=NULL)
    {
      delete   pitem;   
      pitem = NULL;
    }可能你加入的时候有错
      

  4.   

    我用测试代码试过没有问题
    附上我的测试代码:typedef struct _tagItem
    {
    int     nID;   //¸ÃitemµÄidºÅÊǶàÉÙ
    CString name;  //¸ÃitemµÄÃû×Ö
    }tagItem;int count = 5;
    CPtrArray array;
    tagItem* item = NULL;
    for ( int i=0; i<count; i++ )
    {
    item = new tagItem;
    array.Add( item );
    TRACE( _T("Add item%d: 0x%x \n"), i, item );
    }
    for ( i=0; i<count; i++ )
    {
    item = (tagItem*)array.GetAt( i );
    TRACE( _T("delete item%d: 0x%x\n"), i, item );
    delete item;
    item = NULL;
    }
    另外,删除最好用array.Remove(i),并且从后面删起
      

  5.   

    typedef struct MYITEM {
    char szName[4];
    int  nAge;
    };
    typedef MYITEM* PMYITEM;
    ---------------------------------
    CPtrArray   m_arrItems; 

    MYITEM *pitem = NULL;
    pitem   =   new   MYITEM; 
    m_arrItems.Add(pitem); 
    pitem   =   new   MYITEM; 
    m_arrItems.Add(pitem); 
    pitem   =   new   MYITEM; 
    m_arrItems.Add(pitem); 
    for(int   i=0;   i <m_arrItems.GetSize();   i++) 

    pitem   =   (PMYITEM)m_arrItems.GetAt(i); 
    delete   pitem;    

    m_arrItems.RemoveAll(); 
      

  6.   

    ls的:这个应该没有问题的因为你下面没有remove,所以getsize不会改变的
      

  7.   

    需要删除的。你出错应该是因为你用了 delete[],用delete看看。