typedef struct tagGameProtocol
{
UINT    type;
  UINT    size;
char    Data[2000];
}GameProtocol;
typedef CList<GameProtocol*, GameProtocol* > MsgList;MsgList usermsg; GameProtocol *pNewPackage = (GameProtocol*)new char[sizeof(GameProtocol)];
pNewPackage=m_pSock->usermsg.GetTail();
delete m_pSock->usermsg.RemoveTail();
delete[] pNewPackage;
问题是delete[] pNewPackage;删除不掉,如果我把pNewPackage=m_pSock->usermsg.GetTail()这条去掉就能删除,为什么?

解决方案 »

  1.   

    typedef CList<GameProtocol*, GameProtocol*& >
      

  2.   

    GameProtocol *pNewPackage = (GameProtocol*)new char[sizeof(GameProtocol)];
    pNewPackage=m_pSock->usermsg.GetTail() // 在这里把指针都改了阿 ??
     delete m_pSock->usermsg.RemoveTail(); // 
    delete[] pNewPackage; // 这不是delete两边嘛 ?
      

  3.   


    我改成这样也没有用:
    GameProtocol *pNewPackage = (GameProtocol*)new char[sizeof(GameProtocol)];
    pNewPackage=m_pSock->usermsg.RemoveTail();  // 在这里把指针都改了阿 ??
    delete[] pNewPackage; // 这不是delete两边嘛 ?
      

  4.   

    在调试的时候执行这条就出错了delete[] pNewPackage;
      

  5.   

    GameProtocol *pNewPackage = (GameProtocol*)new char[sizeof(GameProtocol)];
    usermsg.addtail( pNewPackage ); // 是不是还要加这一句阿 ?
    pNewPackage=m_pSock->usermsg.RemoveTail(); // 在这里把指针都改了阿 ??
    delete[] pNewPackage; 这边做delete的时候要判断pNewPackage是不是为空,而且要这样写:
    delete[] (char*)pNewPackage;
      

  6.   

    其实pNewPackage=m_pSock->usermsg.GetTail();这样写很不好啊,
    把一个刚new出来的指针指向另外一快内存,很不好,原来的那块内存你再也访问不到了。
      

  7.   

    在调试的时候执行这条还是出错了delete[] (char*)pNewPackage;
    这条我是在线程中加的usermsg.addtail( pNewPackage );
      

  8.   


    其实pNewPackage=m_pSock->usermsg.GetTail();这样写很不好啊,
    把一个刚new出来的指针指向另外一快内存,很不好,原来的那块内存你再也访问不到了。
    谢谢您这句话,解决了,谢谢