2014-08-29 127 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

回答