运行时错误,奇怪的行为

时间:2018-01-12 06:11:36

标签: c++ runtime-error

我编写了一个模拟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和分段错误上给出了运行时错误

1 个答案:

答案 0 :(得分:3)

  

但由于cout语句

,它会产生运行时错误

我不认为这与cout有关。无处创建state类型的实际对象,你只需要指针,然后取消引用它们(例如使用 - &gt;),这是不允许的,除非它们指向相应类型的有效对象。

为了给出更完整的答案,您所拥有的是未定义的行为,因此您的程序处于无效状态,并且您无法对其行为进行推理。因此,您似乎cout中的代码存在问题,但首次使用->时会出现问题。