简单的程序崩溃
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
我尝试用 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