简单的程序崩溃

Simple program crash

我尝试用 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();
}

Hey_state *h是一个指针。

它指向哪里? 你不知道。

其值为未初始化

稍后,您 取消引用 同一个指针,现在复制到 currState

        currState->update();

那里有什么? 你不知道。

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

Hey_state *h;

这会创建一个指向 Hey_state 的指针,它可以随机指向内存中的任何地方。没有实际创建对象。

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

这尝试使用从未创建的 Hey_state,给出错误。

尝试:

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

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