繁体   English   中英

如果带有类指针的语句导致段错误

[英]If statement with a class pointer is causing a segfault

我已经为一个正在工作的C ++项目制作了一个有限状态机类,但是由于某种原因,程序一旦到达某个if语句,就会出现段错误。

这是类本身:

class FiniteStateMachine
{
protected:
    void cleanup();

    State* state_;

public:
    FiniteStateMachine();
    FiniteStateMachine( State* const state );
    ~FiniteStateMachine();

    void changeState();
    void forceState( State* const state );
    char const* getStateName();

};

在定义中,程序一旦到达条件语句,就会发生段错误:

void FiniteStateMachine::changeState()
{
    debugging("FiniteStateMachine::changestate() called");

    if( state_ ) // problem point
    {
        debugging("state_ is not nullptr");
        // state_.handle();
    }
    else
    {
        debugging("state_ is nullptr");
    }
}

debugging()只是一个函数,用于在调试模式下向stdout显示消息。 对我来说,最奇怪的是,if(state_)在程序中更早就使用了。

我正在使用gcc版本4.9.2,Linux Mint 17.2和C ++ 11

如果您需要更多详细信息,请访问github存储库。

问题的根源是您的Engine :: getInstance方法存在错误。

Engine* Engine::getInstance()
{
    Engine* instance = instance_;

    if( !instance_ )
    {
        instance_ = new Engine;
    }

    return instance;
}

第一次调用此方法时,您将始终返回null。 您应该删除本地Engine变量,然后只使用instance_成员。

Engine* Engine::getInstance()
{
    if( !instance_ )
    {
        instance_ = new Engine;
    }

    return instance_;
}

这应该修复导致if语句崩溃的空指针

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM