这段代码有什么错误,为什么输入后就不能运行了??

#include
#define MAX 100

//顺序栈的定义
typedef struct{
int *base;
int *top;
int stacksize;
}SqStack;

//初始化
int InitStack(SqStack &S){
S.base=new int[MAX];
if(!S.base){
return 0;
}
S.base=S.top;
S.stacksize=MAX;
return 1;
}

//入栈
int Push_S(SqStack &S,int e){
//将元素e入栈
if(S.top-S.base==S.stacksize){//判断栈是否满
return 0;
}
S.top++=e;
//S.top+=1;
return 1;
}
//出栈
int Pop_S(SqStack &S,int &e){
//用e返回出栈的元素
if(S.top==S.base){//栈空
return 0;
}
e=
--S.top;
return 1;
}

int main(){
SqStack S;
if(InitStack(S)){
printf("顺序栈初始化成功!\n");
}else{
printf("顺序栈初始化失败!\n");
}

printf("请输入入栈元素:");
int e1;
scanf("%d",&e1);
if(Push_S(S,e1)){
    printf("入栈成功!\n");
}else{
    printf("入栈失败!\n");
}

}

S.base=S.top;
写反了
S.top=S.base;

S.top++=e; 这种写法是要拉去打靶的,虽然编译通过,但是在软件开发中给后人的维护带来头痛感daba