我编写了一个模拟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;
}
初始是切换状态并告知它当前处于哪种状态,它是在已定义的状态之间切换,因此无法理解为什么会丢失数据
代码在g ++上的ideone和分段错误上给出了运行时错误
答案 0 :(得分:3)
但由于cout语句
,它会产生运行时错误
我不认为这与cout
有关。无处创建state
类型的实际对象,你只需要指针,然后取消引用它们(例如使用 - &gt;),这是不允许的,除非它们指向相应类型的有效对象。
为了给出更完整的答案,您所拥有的是未定义的行为,因此您的程序处于无效状态,并且您无法对其行为进行推理。因此,您似乎cout
中的代码存在问题,但首次使用->
时会出现问题。