带有类指针的If语句导致段错误
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()只是一个函数,用于在调试模式下向标准输出显示消息。对我来说最奇怪的是if(state_)在程序的早期使用没有任何问题。
我使用gcc版本4.9.2,Linux Mint 17.2和c++ 11
如果你需要更多的细节,这里是github存储库的链接。
你的问题的根源是你的Engine::getInstance方法有一个bug。
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语句崩溃的空指针
相关文章:
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 如何摆脱C ++中的分段错误错误?
- Clang 8 带有静态 constexpr 和数组的链接器错误 - 错误是什么以及如何解决它?
- 为什么每当我尝试运行此链接列表删除功能时都会收到分段错误错误?
- 如何解决分段错误错误C++
- 作为参数模板的模板类:MSVC 错误 - 错误 C2977:模板参数过多 (C++98)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- 卷曲给出分段错误错误
- 无法访问 Arduino 结构字段。错误"退出状态 1。xxxx 不命名类型"
- 错误错误 C2872:"布尔值":kinect.h 的不明确符号
- C++打印模板容器错误(错误:"运算符<<"的不明确重载)理解?
- 结构的分割错误错误
- 为什么此代码返回分段错误错误?
- 错误错误:无法编译内置功能
- 分段错误错误C++
- C++ 1Z 错误:错误:演绎指南中声明中的显式限定
- 使用对数据类型的向量的哈希表中的分段错误错误
- 为什么此代码会导致分段错误错误
- JNA结构字段值错误
- C++段故障错误