CPtrArray 应用的问题
class Info
{
public:
Info(unsigned long userid,char *buff,int len)
{
this-> userid=userid;
this-> buff=buff;
this-> len=len;
}
unsigned long userid;
char * buff;
unsigned long len;
};
CPtrArray *m_plist;
m_plist = new CPtrArray();
void test::AddToList(unsigned long id,char * buff,unsigned long len)
{
Info *pinfo=new IMMsg(id,time(0),buff,len);
m_plist-> Add(pinfo);
}
char* test::ReadFromList()
{
char* outbuff=NULL;
outbuff=((Info *)m_plist-> GetAt(0))-> buff;
len=((Info *)m_plist-> GetAt(0))-> len;
m_plist-> RemoveAt(i);
return outbuff;
}
为什么addtolist函数中的指针buff 与 readfromlist中的指针outbuff的地址不一样
outbuff的地址中多了两个字母MZ
这是什么问题?
[解决办法]
AddToList中pinfo是个局部变量
[解决办法]
AddToList函数体完就释放了,而你保存的是一个指针的值,而指针所指向的地址值已经是随机值了.
[解决办法]
呵呵,楼主的这么写很可爱。:)
rsp19801226的回答不对的,pinfo是局部变量,但是你已经保留了地址了,跟这个无关。
Info(unsigned long userid,char *buff,int len)
{
this-> userid=userid;
this-> buff=buff;
this-> len=len;
}
这个里面的buff是外部传进来的,能保证外部不会释放马?保险的话,
this-> buff = new char[len];
memcpy(this-> buff, buff,len);
最后删除的时候别忘了释放
[解决办法]
理解错误,我认为m_plist-> Add(pinfo);存储的是pinfo的地址,然后他里面的值变就变了.还是没把这个类理解清楚,谢谢各位兄弟.他的意思是复制pinfo的值吧.丢人了~~~呜呜呜...