简单的程序崩溃

时间:2015-07-15 19:37:45

标签: c++ fsm

我尝试在C ++中实现一个非常简单的FSM。问题是,该程序在执行后会立即崩溃。我是C ++的新手,所以我在这里找不到任何错误。有人可以帮忙吗?提前谢谢!

#include <iostream>
using namespace std;

class State {
    public:
        virtual ~State() {}
        virtual void update();
};

class Hey_state : public State {
    public:
        virtual void update() { cout << "Hey!\n";}
};

class How_state : public State {
    public:
        virtual void update() { cout << "How are you?\n";}
};

class Stranger {
    public:
        Stranger(State *startState)
        : currState(startState) {}
        void greet() {
            currState->update();
        }
        void setState(State *s) {currState = s;}
    private:
        State *currState;
};

int main() {
    Hey_state *h;
    Stranger s(h);
    s.greet();
}

2 个答案:

答案 0 :(得分:5)

Hey_state *h是指针。

它指向哪里? 你不知道。

其值为未初始化

稍后,您取消引用相同的指针,现在已复制到currState

        currState->update();

有什么? 你不知道。

您正在取消引用未初始化的指针。

答案 1 :(得分:3)

Hey_state *h;

这会创建一个指向Hey_state的指针,它可以指向内存中的任意位置。实际上没有创建任何对象。

Stranger s(h);
s.greet();

这会尝试使用从未创建的Hey_state,从而产生错误。

尝试:

Hey_state h;
Stranger s(&h);
s.greet();

创建Hey_state的对象,并将指向该对象的指针传递给Stranger s