类函数不保存成员值

时间:2015-12-13 13:40:55

标签: c++ arrays object data-loss data-corruption

由于某种原因,该函数不会保存除第一个对象之外的对象数组的成员值。我浓缩了代码以突出这个问题的本质。

classFile.cpp

myClass objectArray[10];

void myClass::Set(float x, int elementID)
{
    myX = x;
    log<< myX; //output is equal to x
    log<< elementID; //output ranges from 0-9
    log<< objectArray[elementID].myX; //output is incorrect if elementID is higher than 0
}

classFile.h

extern myClass objectArray[10];

callingFunctionFile.cpp

for(int i=0; i<10;i++)
{
   objectArray[i].Set(5.0f, i);
   i++;
}

objectArray[elementID].myX的错误输出对于特定elementID始终相同,但在其他elementID之间不同。有时候它是0,有时候它就像8231924021

编辑: 这里是原始代码,相关部分写在顶部(如果您注意到某些细微差别,导致实际执行它的时间太长):classFile.hclassFile.cppfunctionCallingFile.cpp

EDIT2: 看起来类成员的位置在每个对象的内存中移位3个字节,这使得除了第一个之外它们都无法读取它们。以下是myX地址与objectArray[i].myX地址的比较 - pastebinLink

我可以手动对付这3个字节的移位,但它就像将除臭剂喷洒到工作中而不是冲洗它。

EDIT3: 解决问题的方法是在callingFunctionFile.cpp文件中更改#include "classFile.h"的位置。将它放在顶部后,第一个包含问题就消失了

1 个答案:

答案 0 :(得分:2)

您在循环中递增i两次,使您跳过数组中的每个其他元素。