顺序栈代码遭遇问题,无法正常运行

问题遇到的现象和发生背景

顺序栈编写代码遭遇问题。

用代码块功能插入代码,请勿粘贴截图
#include 
#include 

#define MAXSIZE 100
typedef struct
{
    int *base;            //鏍堝簳鎸囬拡 
    int *top;              //鏍堥《鎸囬拡 
    int stacksize;        //鏍堝彲鐢ㄧ殑鏈€澶у閲?
}SqStack;



//初始化 
int InitStack(SqStack S);
//顺序栈入栈 
int Push(SqStack S,int e);
//出栈 
int Pop(SqStack S,int e); 
//获得元素 
int GetTop(SqStack S); 


int main()
{
    SqStack S;
    int *e=1;
    InitStack(S);
    
    Push(S,e);
    Push(S,e); 
    printf("%d",e);
    int x = *S.top;
    printf("%d",x);
    printf("%d",x);
    Pop(S,e);
    GetTop(S);
    return 0;
 } 
//初始化 
int InitStack(SqStack S){
//    S->base = (int)malloc(MAXSIZE*sizeof(int));
    int arr[MAXSIZE];
    S.base = arr;
    if(!S.base) return 0;
    S.top = S.base;
    S.stacksize = MAXSIZE;
    return 1;
}
//入栈 
int Push(SqStack S,int e){
    if(S.top-S.base == S.stacksize) return 0;
//    *S.top++ = e;
    *S.top = e;
    S.top++;
    return 1;    
}
//出栈 
int Pop(SqStack S,int e){
    if(S.top == S.base) return 0;
//    e = *--S.top;
    S.top--;
    e = *S.top; 
    return 1;
}
//获得元素 
int GetTop(SqStack S){
    if(S.base != S.top){
        return *(S.top-1);
    }
}

运行结果及报错内容

img

我的解答思路和尝试过的方法

经过调试,发现
*S.top = e;
S.top++;
出现问题

我想要达到的结果

希望能获得解决方案

改动处见注释,供参考:

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct
{
    int *base;            //鏍堝簳鎸囬拡
    int *top;              //鏍堥《鎸囬拡
    int stacksize;        //鏍堝彲鐢ㄧ殑鏈€澶у閲?
}SqStack;
//初始化
int InitStack(SqStack* S); //修改
//顺序栈入栈
int Push(SqStack* S,int e);//修改
//出栈
int Pop(SqStack* S,int* e); //修改
//获得元素
int GetTop(SqStack S);
int main()
{
    SqStack S;
    int e=1; //int *e=1; 修改
    InitStack(&S);
    Push(&S,2);  //修改
    Push(&S,3);  //修改
           //printf("%d",e);修改
           //int x = *S.top;
           //printf("%d",x);
           //printf("%d",x);
    Pop(&S, &e);
    printf("%d ",e);

    e = GetTop(S);  //修改
    printf("%d ",e);

    return 0;
 }
//初始化
int InitStack(SqStack* S){

    S->base = (int*)malloc(MAXSIZE*sizeof(int));//修改
                            //int arr[MAXSIZE];  修改
                            //S.base = arr;      修改
                            
    if(!S->base)  return 0; //if(!S.base) return 0;修改
    S->top = S->base;       //S.top = S.base;
    S->stacksize = MAXSIZE; //S.stacksize = MAXSIZE;
    return 1;
}
//入栈
int Push(SqStack* S,int e){

        //if(S.top-S.base == S.stacksize) return 0;
    if(S->top - S->base == S->stacksize) return 0;
        //*S.top++ = e;
    *S->top = e; //修改
    S->top++;    //修改
    return 1;
}
//出栈 
int Pop(SqStack* S,int* e){

         //if(S.top == S.base) return 0; 修改
    if(S->top == S->base) return 0;
         //    e = *--S.top;
    S->top--;    //修改
    *e = *S->top;//修改
    return 1;
}
//获得元素 
int GetTop(SqStack S){
    if(S.base != S.top)
        return *(S.top-1);
    else
        return -999; //修改
}