2011-07-01 53 views
-1

我構造的對象,像這樣:爲什麼全局結構和成員變量(同一類型)的內存設置等於全局變量?

TestObj::TestObj(const TypedefStruct& myStruct) : m_memberStruct(myStruct){}

的結構是這樣的:

typedef struct{ short x; short y;} TypedefStruct;。它是class TestObj .`

公共成員當我比較全球myStruct的記憶被傳遞到構造函數和TestObjm_memberStruct成員變量,記憶的內容有所不同。

PS:我初始化全局結構,如下所示:TestObj::TypeDefStruct myStruct = {0};

我已閱讀,編譯器將有時墊的結構體的元素,使各元件的大小相同,並且可以與比較存儲器干擾一個全局結構和它的「副本」,但我不認爲這適用於這裏,因爲它是一個相同類型的兩元素結構...

任何洞察的情況?如果除了檢查兩個元素的值之外,我實際上無法比較內存,我仍然想知道爲什麼內存不同。

+1

*如何*它們有什麼不同?你可以發佈兩個轉儲嗎? –

+0

請顯示更多代碼。這似乎沒有理由發生。另外,這兩個版本的內存內容是什麼? –

+0

你如何比較內存?你在程序中使用'memcmp'嗎?或者你在調試器中傾銷內存? –

回答

0

編譯器可以填充m_memberStruct,因爲它是TestObj的一部分。也就是說,它可能會嘗試給TestObj正確對齊。

+1

它可以,但它不會。 OP在其示例程序中提供的結構不會被填充到任何可能運行的編譯器上。 –

0

你確定你正在查看數據而不是說對象的地址嗎?

你可以嘗試初始化變量,以易於識別的值,然後尋找:

myStruct.x = 0xAA; 
myStruct.y = 0xBB;