在编写实现布尔表达式的程序时出现Segmentetion fault报错,是哪个指针出问题了吗?
这是题目
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct op{
char ch[1000];
int top;
};
struct data{
char data[1000];
int top;
};
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;
char s[1005];
int len;
while(gets(s)){
len=strlen(s);
for(int i=0;i<len;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]);
}
return 0;
}