结构体 动态内存 操作
在vc 中定义比较大的结构体
假如
typedef struct _PAGE_INFO_T{
CString sName;               
int iPageID;
int iData[0x100];
}m_page_t1;typedef struct _PAGE_INFO_T{
CString sName;
int iccID;
int iData[0x100];
}m_page_t2;typedef struct _DEV_INFO_T{
CString strDevName;
int iDevID;
int iMaxPage;
int iCurPage;
m_page_t1 *tp1;
m_page_t2 *tp2;
}m_test_t;定义 m_test_t g_testSrc;
并且对结构体 m_page_t1 *tp1; 动态分配内存.
g_testSrc.tp1 = new m_page_t1[10];
g_testSrc.tp2 = new m_page_t2[10]new 了以后,并且为结构体进行了赋值操作,都还正常,但是为什么delete 出错?
if(g_testSrc.tp1!=NULL)
{
 delete []g_testSrc.tp1;
 g_testSrc.tp1=NULL;
}
if(g_testSrc.tp2!=NULL)
{
 delete []g_testSrc.tp2;
 g_testSrc.tp2=NULL;
}
1.>怀疑是CString sName;的问题,但是不知道如何解决?如果不delete,而直接将g_testSrc.tp1指向其它地方,那之前的空间是不是自动销毁还是占用中?

解决方案 »

  1.   

    知道问题出在哪了,出在赋值的部分,果然是CString的问题memcpy(g_testSrc.tp2,g_testSrc.tp1,sizeof(m_page_t1)*10);因为万恶的CString如果用memcpy 的话,g_testSrc.tp2.sName 和g_testSrc.tp1.sName 指向的地址是同一个,如果前一个已经delete了,后一个就会出错.诶~~~~
    如何改好呢?
      

  2.   

    typedef struct _PAGE_INFO_T

    CString sName; //问题在这里!不能这样
    char sName[32];//用这个!!!!!
    int iccID; 
    int iData[0x100]; 
    }m_page_t2; 为结构体进行了赋值操作:
    CString str="就这样";
    strcyp(tp1->sName, str);
      

  3.   

    对象体最好不要直接放在struct/class中,如果你需要的话,放个指针,用new/delte来操作,因为对象有自己的内存分配调用机制