更改成员定义的顺序会破坏内存

时间:2014-07-25 23:19:37

标签: c++ visual-studio-2012

我有一个包含一些成员类的课程。一切正常,直到我改变我定义成员的顺序。

这是有效的代码:

  class Core{
public:

    /// Initialization and main loop.
    bool initCore(int argc, char *argv[], string dirPath);
    int mainLoop();

    /// Network impulse message
    static void networkImpulseCallback(unsigned char* data, int length);

private:
    bool                _running;
    string              _directoryPath;
    string              _serverIP;

    string              _loginName;
    string              _pass;
    string              _myShowName;

    /// System components.
    ConfigurationFile   _config;
    ResourceParser      _resourceParser;

    Graphics            _graphics;
    Input               _input; 
    ScriptInterpreter   _scriptInt;
    GUISystem           _guiSystem;
    EntityManager       _entityManager;

    /// Component threads.
    thread              *_netLoop;
    thread              *_graphLoop;
    thread              *_scriptLoop;
    thread              *_animationLoop;
    thread              *_physicsLoop;

    /*
     *  Initializes the rest of the system after the login.
     */
    bool _initPostLogin();

}

如果我现在放置Graphics对象下的Input对象,我将获得访问冲突。发生违规的地方取决于我正在移动的对象。我试图通过移动对象来找出导致错误的对象,但遗憾的是没有结果。发生违规的对象成员都是未初始化的(例如向量或互斥)。 现在,我的猜测是内存被破坏了。如果是这样,找到错误的最佳方法是什么?如果没有,问题出在哪里?

2 个答案:

答案 0 :(得分:0)

你在Input类中有一些缓冲区吗?我猜你写的是结束并腐败了下一个成员(图形)。

答案 1 :(得分:0)

你为你的指针分配了内存吗?

在您访问对象之前,库是否取消分配对象?