我编写了一个模拟 DFA 的代码,但由于 cout 语句而出现运行时错误,删除它后运行正常。
这是代码
#include "bits/stdc++.h"
using namespace std;
struct state
{
char name = ' ';
bool final=false;
state *o;
state *i;
state *t;
};
int main() {
state *A,*B,*C,*D,*E,*initial;
E->final = true;
A->name='A';
B->name='B';
C->name='C';
D->name='D';
E->name='E';
A->o = B;
A->i = A;
A->t = B;
B->o = E;
B->i = A;
B->t = C;
C->o = A;
C->i = E;
C->t = D;
D->o = C;
D->i = D;
D->t = E;
E->o = E;
E->i = D;
E->t = A;
initial = A;
cout<<(initial->name);
int p = 5;
while(p--) {
cout<<"current state ";
cout<<(initial->name);
int a;
cin>>a;
if (a==0) initial = initial->o;
else if (a==1) initial = initial->i;
else initial = initial->t;
}
return 0;
}
Initial是切换状态并告诉它当前是哪个状态,它在定义的状态之间切换,所以无法理解为什么会丢失数据
代码在 ideone 上给出运行时错误,在 g++ 上给出段错误
最佳答案
but it is giving a runtime error because of the cout statement
我认为这与 cout
无关。您在任何地方都无法创建 state
类型的实际对象,您只有指针,然后取消对它们的引用(例如使用 ->),这是不允许的,除非它们指向相应类型的有效对象。
为了给出更完整的答案,您所拥有的是未定义的行为,因此您的程序处于无效状态,您无法推断其行为。因此,在您看来,cout
中的代码是有问题的,但问题发生在更早的时候,是在第一次使用 ->
时。
关于c++ - 运行时错误,奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48220538/