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()这条去掉就能删除,为什么?
{
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()这条去掉就能删除,为什么?
pNewPackage=m_pSock->usermsg.GetTail() // 在这里把指针都改了阿 ??
delete m_pSock->usermsg.RemoveTail(); //
delete[] pNewPackage; // 这不是delete两边嘛 ?
我改成这样也没有用:
GameProtocol *pNewPackage = (GameProtocol*)new char[sizeof(GameProtocol)];
pNewPackage=m_pSock->usermsg.RemoveTail(); // 在这里把指针都改了阿 ??
delete[] pNewPackage; // 这不是delete两边嘛 ?
usermsg.addtail( pNewPackage ); // 是不是还要加这一句阿 ?
pNewPackage=m_pSock->usermsg.RemoveTail(); // 在这里把指针都改了阿 ??
delete[] pNewPackage; 这边做delete的时候要判断pNewPackage是不是为空,而且要这样写:
delete[] (char*)pNewPackage;
把一个刚new出来的指针指向另外一快内存,很不好,原来的那块内存你再也访问不到了。
这条我是在线程中加的usermsg.addtail( pNewPackage );
其实pNewPackage=m_pSock->usermsg.GetTail();这样写很不好啊,
把一个刚new出来的指针指向另外一快内存,很不好,原来的那块内存你再也访问不到了。
谢谢您这句话,解决了,谢谢