結(jié)構(gòu)體CString問題
1 struct sTest
2 {
3 CString addr;
4 int port;
5 };
定義CString addr時(shí),編譯器會(huì)在棧里分配一塊內(nèi)存空間,然后調(diào)用CString的默認(rèn)構(gòu)造函數(shù)初始化addr,此時(shí)Cstring內(nèi)部的m_pchData指向一個(gè)空字串 " ",而不是NULL。cstring在結(jié)構(gòu)里也是一樣的,結(jié)構(gòu)無論是從棧中分配如 :
ME_REFRESH lpmerefresh
或從堆中分配 :
lpmerefresh=new ME_REFRESH;
type為cstring的分量都會(huì)被調(diào)用默認(rèn)構(gòu)造函數(shù)初始化name,使Cstring內(nèi)部的m_pchData指向一個(gè)空字串 " ",該空字串是afxEmptyString的m_pchData。memset CString時(shí),該m_pchData便指向了NULL,那么就表明該CString的值被破壞了,所以報(bào)錯(cuò)。
結(jié)構(gòu)體成員如果僅僅是基本類型成員可以直接memset(ST,0,sizeof(ST)),但結(jié)構(gòu)體里面包含有指針,直接memset是不行的,因?yàn)橹羔槼蓡T的sizeof都是4字節(jié)。你應(yīng)該專門對(duì)指針成員進(jìn)行memset,sizeof對(duì)于包含指針的結(jié)構(gòu)獲得的長(zhǎng)度不是你想要的。
posted on 2012-04-24 13:56
王海光 閱讀(1868)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
MFC