2011-07-01 47 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;