在openjudge提交时出现Runtime Error

本地调试时没有问题,但在openjudge上提交时出现了Runtime Error错误,查了一下可能的原因好像是有什么东西越界或者溢出了,尝试改了一下还是会Runtime Error,请问到底是哪里出了问题呢😭
下面是题目和代码:

img



```c
#include 
#include 
#include 
struct op{
    char ch[1005];
    int top;
};
struct data{
    char data[1005];
    int top;
};
char s[1005];
int len;
void add(op *p,data *q){
    char a,b,c;
    c=p->ch[p->top];
    p->top--;
    if(c!='!'){
        a=q->data[q->top];
        q->top--;
        b=q->data[q->top];
        q->top--;
        if(c=='&'){
            if(a=='V'&&b=='V'){
                q->top++;
                q->data[q->top]='V';
            }
            else{
                q->top++;
                q->data[q->top]='F';
            }
        }
        else if(c=='|'){
            if(a=='F'&&b=='F'){
                q->top++;
                q->data[q->top]='F';
            }
            else{
                q->top++;
                q->data[q->top]='V';
            }
        }
    }
    else if(c=='!'){
        a=q->data[q->top];
        q->top--;
        if(a=='V'){
            q->top++;
            q->data[q->top]='F';
        }
        else if(a=='F'){
            q->top++;
            q->data[q->top]='V';
        }
    }
}
int main(){
    op *p=(op*)malloc(sizeof(op));
    p->top=-1;
    data *q=(data*)malloc(sizeof(data));
    q->top=-1;
    while(fgets(s,1005,stdin)){
        len=strlen(s);
        for(int i=0;i1;i++){
            if(s[i]=='V'||s[i]=='F'){
                q->top++;
                q->data[q->top]=s[i];
            }
            else if(s[i]=='('||s[i]=='!'||p->top==-1){
                p->top++;
                p->ch[p->top]=s[i];
            }
            else if(s[i]=='&'){
                if(p->ch[p->top]=='('||p->ch[p->top]=='|'){
                    p->top++;
                    p->ch[p->top]=s[i];
                }
                else{
                    while(p->ch[p->top]!='('&&p->ch[p->top]!='|'){
                        add(p,q);
                        if(p->top==-1) break;
                    }
                    p->top++;
                    p->ch[p->top]=s[i];
                }
            }
            else if(s[i]=='|'){
                if(p->ch[p->top]=='('){
                    p->top++;
                    p->ch[p->top]=s[i];
                }
                else{
                    while(p->ch[p->top]!='('){
                        add(p,q);
                        if(p->top==-1) break;
                    }
                    p->top++;
                    p->ch[p->top]=s[i];
                }
            }
            else if(s[i]==')'){
                while(p->ch[p->top]!='('){
                    add(p,q);
                }
                p->top--;
            }
        }
        while(p->top!=-1){
            add(p,q);
        }
        printf("%c\n",q->data[q->top]);
    }
    free(p);
    free(q);
    return 0;
}

```

Runtime Error通常是因为程序在运行过程中发生了一些异常错误,例如数组越界、空指针引用等。在本地运行没有问题,但在openjudge上出现错误,可能是因为openjudge测试数据不同于你本地的测试数据,可能包含了一些你没有考虑到的特殊情况,导致程序出错。

你可以在程序中加入一些边界判断和异常处理,例如检查数组下标是否越界,检查指针是否为空,以及检查输入是否合法等。另外,你也可以尝试将程序的错误信息输出到标准错误流中,这样可以更方便地找到问题所在。你可以在程序中使用fprintf(stderr, "error message\n")将错误信息输出到标准错误流中。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^