首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

CPtrArray 应用的有关问题

2012-02-27 
CPtrArray 应用的问题classInfo{public:Info(unsignedlonguserid,char*buff,intlen){this- useriduserid

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的值吧.丢人了~~~呜呜呜...

热点排行