为什么DevC++在调试程序时,会出现程序段访问违例错误?
//以下程序是我写的一个关于计算仅含有析取(用+表示)合取(用*表示)和非(用-表示)的表达式的算法
//但在DevC++在调试程序时,会出现程序段访问违例错误? 为什么??哪里错了??
#include <stdlib.h>
#include <stdio.h>
#define ssize 100
#define sinc 10
typedef struct
{ char *base;
char *top;
int size;
}sq;
initstack(sq *s)
{
s->base = (char * )malloc(sinc*sizeof(char));
s->top=s->base;
s->size=ssize;
}
gettop(sq *s,char *e) //返回栈顶元素
{if(s->top==s->base)
printf("kong");
*e=*(s->top-1);
}
char duqu(sq *s) //读取栈顶元素
{ char p=*(s->top-1);
return p;
}
push(sq *s,char e) //压入栈
{
if(s->top-s->base>=s->size)
{s->base=(char *)malloc(sinc*sizeof(char));
if(!s->base)exit(1);
s->top=s->base+sinc;
s->size=(s->size)+sinc;
}
*s->top++=e;
}
out(sq *s)
{s->top--;
} //出栈
int iscope(char s) //判断是否为操作符
{if(s=='+'||s=='*'||s=='-')
return 1;
else return 0;
}
int isnum(char s) // 判断是否为操作数
{if(s=='1'||s=='0')
return 1;
else return 0;
}
char youxian(char a,char b) //判断优先级
{if(a=='('&&b==')') return '[';
else if(a=='(') return '<' ;
else if(b==')')return '>' ;
else return '=';
if (a=='#') return '<';
}
//计算析取式 + 非-
//计算和取式 *
char jisuan(char a,char b ,char c) //计算表达式
{switch(c)
{case '*':if(a=='1'&&b=='1')return 1;else return 0;break;
case '+':if(a=='0'&b=='0') return 0;else return 1;break;
case '-':if(a=='1')return 0;else return 1;break;
}
}
main()
{ sq num ;
sq cope;
char c;
char a,b,d;
char x;
//char e='a';
//char b;
initstack(&cope);
initstack(&num);
push(&cope,'#');
c=getchar();
while(c!='\n')
{if(isnum(c)) push(&num,c);
else switch(youxian(duqu(&cope),c))
{case '<': push(&cope,c);c=getchar();break;
case '[': out(&cope);c=getchar();break;
case '=':push(&cope,c);c=getchar(); break;
case '>':a=duqu(&num);out(&num);b=duqu(&num);out(&num);d=duqu(&cope);out(&cope);
x=jisuan(a,b,d);push(&num,x);break;
}
}
printf("%c",x);
}