我为一个正在研究的小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显示消息的函数。对我来说最奇怪的事情是,如果(state_)在程序的早期使用没有任何障碍。
我正在使用gcc版本4.9.2,Linux Mint 17.2和C ++ 11
如果您需要任何进一步的详细信息,请here is the link to the github repository.
答案 0 :(得分:5)
问题的根源在于您的Engine :: getInstance方法存在错误。
Engine* Engine::getInstance()
{
Engine* instance = instance_;
if( !instance_ )
{
instance_ = new Engine;
}
return instance;
}
第一次调用此方法时,您将始终返回null。您应该删除本地Engine变量,并使用instance_ member。
Engine* Engine::getInstance()
{
if( !instance_ )
{
instance_ = new Engine;
}
return instance_;
}
这应该修复导致if语句崩溃的空指针