malloc和realloc函数总是报错
//用栈来实现表达式的求值
#include<iostream.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<process.h> // exit()
#include<float.h>
#define STACK_INIT_SIZE 100; //栈的最大长度
#define STACKINCREMENT 10; //栈的长度的增量
typedef struct //定义float数字栈类型
{
float *base;
float *top;
int stacksize;
}SqStack_float;
typedef struct //定义char字符栈类型
{
char *base;
char *top;
int stacksize;
}SqStack_char;
char ch[7]={'+','-','*','/','(',')','#'}; //两个全局数组
char Array[7][7]=
{ {'>','>','<','<','<','>','>'},
{'>','>','<','<','<','>','>'},
{'>','>','>','>','<','>','>'},
{'>','>','>','>','<','>','>'},
{'<','<','<','<','<','=','@'},
{'>','>','>','>','@','>','>'},
{'<','<','<','<','<','@','='} };
//函数声明
void InitStack(SqStack_float S); //初始化一个数字栈
void InitStack(SqStack_char S); //初始化一个字符栈
void Push(SqStack_float S,float e); //将数字e进栈
void Push(SqStack_char S,char e); //将字符e进栈
void Pop(SqStack_float S,float e); //数字e出栈
void Pop(SqStack_char S,char e); //字符e出栈
float GetTop(SqStack_float S); //返回数字栈栈顶元素
char GetTop(SqStack_char S); //返回字符栈栈顶元素
bool In(char e); //判断字符e是否属于字符集合
char Precede(char e,char c); //比较两个字符的优先级,并返回
float Operate(float a,char e,float b); //将a和b进行e字符代表的运算,并返回
float main()
{
SqStack_char OPTR; SqStack_float OPND;//分别定义字符栈和数字栈
char c,x,theta;
float a,b,e;
int i;
InitStack(OPTR); Push(OPTR,'#');
InitStack(OPND);
char expr[80];
gets(expr);
c=expr[0]; i=0;
//c=getchar();
while(c!='#'||GetTop(OPTR)!='#')
{
if(!In(c))
{
e=(float)c; Push(OPND,e);
i++; c=expr[i];
}
else
{
switch(Precede(GetTop(OPTR),c))
{
case'<':
Push(OPTR,c); i++; c=expr[i];
break;
case'=':
Pop(OPTR,x); i++; c=expr[i];
break;
case'>':
Pop(OPTR,theta);
Pop(OPND,b);Pop(OPND,a);
Push(OPND,Operate(a,theta,b));
break;
}
}
return GetTop(OPND);
}
}
void InitStack(SqStack_float S) //初始化一个数字栈
{
S.base=(float*)malloc(STACK_INIT_SIZE*sizeof(float));
//if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
}
void InitStack(SqStack_char S) //初始化一个数字栈
{
S.base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));
//if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
}
void Push(SqStack_char S,char e) //在字符栈中字符e进栈
{
if(S.top-S.base>=S.stacksize)
{
S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));
//if(!S.base)exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
}
void Push(SqStack_float S,char e) //在数字栈中数字e进栈
{
if(S.top-S.base>=S.stacksize)
{
S.base=(float*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(float));
//if(!S.base)exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
}
void Pop(SqStack_char S,char e) //在字符栈中字符e出栈
{
if(S.top==S.base) cout<<"空栈不能删除!"<<endl;
else e=*--S.top;
}
void Pop(SqStack_float S,float e) //在数字栈中数字e出栈
{
if(S.top==S.base) cout<<"空栈不能删除!"<<endl;
else e=*--S.top;
}
char GetTop(SqStack_char S) //返回字符栈栈顶元素
{
//if(S.top==S.base)
char e=*(S.top-1);
return e;
}
float GetTop(SqStack_float S) //返回数字栈栈顶元素
{
//if(S.top==S.base)
float e=*(S.top-1);
return e;
}
bool In(char e) //判断字符e是否属于字符集合
{
for(int i=0;i<7;i++)
{
if(e==ch[i]) return true;
}
return false;
}
char Precede(char e,char c) //比较两个字符的优先级
{
int i,j,k;
for(k=0;k<7;k++)
{
if(e==ch[k]) i=k;
if(c==ch[k]) j=k;
}
return Array[i][j];
}
float Operate(float a,char e,float b) //运算并返回结果
{ float value;
switch(e)
{
case '+':
value=a+b; break;
case '-':
value=a-b; break;
case '*':
value=a*b; break;
case '/':
value=a/b; break;
default: break;
}
return value;
}
程序编译时总是这两个malloc和realloc函数出问题,不知道是什么会事,把乱七八糟的头文件加进去了之后,问题依旧,希望高手能帮我看一下,不胜感激!