简单程序崩溃 我试图在C++中实现一个非常简单的FSM。问题是,这个程序在执行后会立即崩溃。我是新的C++,所以我找不到任何bug在这里。有人能帮忙吗?提前谢谢 #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(); } #包括 使用名称空间std; 阶级国家{ 公众: 虚拟~State(){} 虚拟空更新(); }; 国家:公共国家{ 公众: virtual void update(){cout
简单程序崩溃 我试图在C++中实现一个非常简单的FSM。问题是,这个程序在执行后会立即崩溃。我是新的C++,所以我找不到任何bug在这里。有人能帮忙吗?提前谢谢 #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(); } #包括 使用名称空间std; 阶级国家{ 公众: 虚拟~State(){} 虚拟空更新(); }; 国家:公共国家{ 公众: virtual void update(){cout,c++,fsm,C++,Fsm,Hey_state*h是一个指针 它指向哪里?你不知道。 其值未初始化 稍后,您将取消引用同一指针,该指针现在复制到currState currState->update(); 有什么?你不知道。 您正在取消对未初始化指针的引用。嘿_state*h; 这将创建一个指向Hey_state的指针,该指针可以随机指向内存中的任何位置。实际上没有创建任何对象 Stranger s(h); s.greet(); 这会尝试使用从未创建过的Hey_状态,并给出一个错误 尝试: 创建一
Hey_state*h
是一个指针
它指向哪里?你不知道。
其值未初始化
稍后,您将取消引用同一指针,该指针现在复制到currState
currState->update();
有什么?你不知道。
您正在取消对未初始化指针的引用。
嘿_state*h;
这将创建一个指向Hey_state
的指针,该指针可以随机指向内存中的任何位置。实际上没有创建任何对象
Stranger s(h);
s.greet();
这会尝试使用从未创建过的Hey_状态,并给出一个错误
尝试:
创建一个对象,该代码为“代码> HyyStAt/Ung>,并将一个指针传递给<代码>陌生人> /Cord>< /P>,您可以使用调试器并告诉我们它崩溃的是什么行吗?*,因为您是C++的新手,应该提到您必须学会使用调试器,这样的问题就不会那么神秘了。
Hey_state h;
Stranger s(&h);
s.greet();