GROUP_STR *pTemp = new GROUP_STR [groupno + 1];
memset(pTemp, 0, sizeof(GROUP_STR) * (groupno+1));
if(pGroup) 
{
memcpy(pTemp, pGroup, sizeof(GROUP_STR) * groupno);
delete []pGroup;
}说明:GROUP_STR 是一个结构体,定义如下:
struct  GROUP_STR {
char groupname[MAX_USERNAME];
GROUPUSER   *nameid;
int nameno;
int groupexist;
};
问题:在上面的代码中,new分配内存的时候是怎么分配的?他的nameid成员给分内存了吗?那后面的memcpy函数,sizeof(GROUP_STR)是怎么算的?delete函数可以直接这么删除结构吗?难道不需要线删除它的成员nameid所分配的空间?

解决方案 »

  1.   

    执行完下面这句后
    GROUP_STR *pTemp = new GROUP_STR [groupno + 1];
    你的GROUP_STR 中的nameid其实只放了一个指针,他没有指向任何东西
    nameid要赋值只能再单独的使用new,delete来分配与释放内存---------
      ++C++
    ---------
      

  2.   

    回复:FlyYang(++X++)  
          您好,new之后,是放了一个空指针,那么之后的memcpy是怎么回事呢,pGroup里的nameid肯定不是空指针,有实际内存,这个memcpy是怎么操作的,后面的sizeof怎么算来的?
      

  3.   

    FlyYang(++X++)说的是对的。楼主可能没有透彻理解“指针”的本质。nameid即使是一个空指针,也并不说明它不占用的内存。memcpy是按位操作的。