在Win CE 6.0中,类TankObject是在静态库中定义的,C ++编译器是VS2008; target是ARM4(/ QRarch4)。
类TankObject的一个实例是通过调用
形式构造的* TankObject myTankObject = new TankObject(parm1,parm2 ...);
在TankObject定义中声明的最后一个属性是一个对象指针,当对其进行赋值时,会发生另一个动态分配对象的内存损坏。
Step into constructor显示调用operator new的大小为0x500。 sizeof(TankObject)显示两个不同的值,具体取决于上下文:
在实例化上下文(应用程序)时,sizeof(TankObject)和sizeof(* myTankObject)是0x500。 在对象本身(构造函数或对象方法)的上下文中,sizeof(TankObject)和sizeof(* this)是0x508。最后声明的属性的地址是0x500,相对于对象。
调用新请求并接收0x500字节。对象本身期望并使用0x508字节,这可能导致最后一个属性的赋值踩到其他动态分配的对象上。
解决方法是在对象定义的末尾声明另一个未使用的属性,以将请求填充到新的。
两个上下文都包含相同的.h文件,要调试我将include语句更改为显式路径名。我也经历了编译器开关,使它们完全相同。所以我很困惑,如果有人能说清楚,我很高兴,我想知道一个合适的解决方案。