2014-08-29 58 views
0

对于来自UNIT测试的构造函数中的某些reasone字段初始化,会破坏内存。构造函数中的字段初始化会破坏内存

我有以下类

//.h 
    class Entity 
    { 
    public: 
... 
    Entity(); 

    private: 
     unsigned int _nextOperatorId; 
     unsigned int _operators[30][4]; //from consts 
... 
    } 

//.cpp 
Entity::Entity() : _operators(), _nextOperatorId(1) 
    { 
     /* If i run this from unit test i see: 
     _operators [0] 0x0569bb38 {3452816845, 3452816845, 3452816845, 3452816845, 1} 
     _operators [1] 0x0569bb4c {3452816845, 0, 0, 0, 0} 
     _operators [2] 0x0569bb4c {0, 0, 0, 0, 0} 
     ... (all other rows are zeroes). 

     If i delete _nextOperatorId(1) initialiazation, or if i run constructor from  console app, here all as expected - all rows in operators array are zeroes */ 


    } 

我运行这个在VS单元测试类初始化是这样的:

private 
     Entity* entity; 
public: 
     TEST_METHOD_INITIALIZE(ClassInitialize) 
     { 
      entity = new Entity(); 
     } 

那么,为什么内存corruypted后,我加入_nextOperatorId(1)?所有看起来这么简单..

+0

后一个完整的例子,编译。 – user657267 2014-08-29 08:25:48

+0

我很想知道是否相同的问题与初始化列表顺序相反(即它与您班级中的decls匹配)。注意:它应该没关系;他们应该始终按照自上而下的decl顺序进行初始化,而不是初始化者列表顺序,但是我不会放过MS来放弃这个球。 – WhozCraig 2014-08-29 08:33:31

回答