Re: [問題] 奇怪的pointer assign問題...

看板Programming作者 (殺破狼...殺~~~)時間18年前 (2006/06/24 01:08), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《kafy (殺破狼...殺~~~)》之銘言: : 我使用的環境是VC6.0,配合DirectX9.0的sdk, : 我把範例的code用自己的方式給整理過, : 結果同樣的一段code section在run的時候發生了很奇怪的問題, : 假設有兩個class : class D3DXFRAME {...}; : class D3DXFRAME_EX : public D3DXFRAME { ... }; : run以下的Code, : D3DXFRAME_EX *testptr1 = new D3DXFRAME_EX; : D3DXFRAME *testptr2 = NULL; : testptr2 = testptr1; : 假設testptr1 new出來的值是0x00d01530 : 在assign給testptr2的時候居然自動加4了, : 也就是testptr1 assign給testptr2的是0x00d01534 : 這真是太神奇了!!!! : 有沒有人遇過相同的問題,然後知道為什麼的嗎? 我測試了一下,修改正確了,大概知道為什麼 原本的D3DXFRAME算是Struct物件,裡面的定義只有很單純的member variable而已, 但是D3DXFRAME_EX我定義成class,而裡面的deconstructor是virtual的, 讓D3DXFRAME_EX變成virtual class, 所以多了一個隱形的member variable, __vfptr 指標向上轉型導致父類別field的起始位址與子類別的起始位址不同所照成的, 我把virtual這個modifier拿掉就可簡單的解決問題, 可是有沒有不用拿掉的作法呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.217.210.24
文章代碼(AID): #14d1_soq (Programming)
文章代碼(AID): #14d1_soq (Programming)