c语言用栈做的数制转换,为什么输出不对啊,总是4206655,还停不下来

#include"stdio.h"
#include"stdlib.h"
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define NULL 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0

typedef int SElemType;
typedef int Status;
typedef struct{
SElemType base;
SElemType *top;//顶指针
int stacksize;
}SqStack;
Status InitStack(SqStack *S){//构造空栈
(*S).base=(SElemType
)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!(*S).base)exit(OVERFLOW);
(*S).top=(*S).base;
(*S).stacksize=STACK_INIT_SIZE;
return OK;
}
Status StackEmpty(SqStack S){//判断栈是否为空
return((*S).top==0);
}
Status Push(SqStack *S,SElemType e){
if((*S).top-(*S).base>=(*S).stacksize){
(*S).base=(SElemType
)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!(*S).base) exit(OVERFLOW);
(*S).top=(*S).base+(*S).stacksize;
(*S).stacksize+=STACKINCREMENT;
}
*((*S).top)++=e;
return e;
}
Status Pop(SqStack *S,SElemType *e){
if((*S).top==(*S).base)return ERROR;
(*S).top--;
e=(*S).top;
return OK;
}
void conversion (int Num,int M) {

SElemType e;
SqStack S;
InitStack(&S);      // 构造空栈
while (Num) {
    Push(&S,Num%M);
    Num = Num/M;
}
while (!StackEmpty(&S)) {
    Pop(&S,&e);
    printf ("%d\n", e);
}
//printf("\n");

}
int main(){

int n,m;
printf("请输入待转化的十进制数\n");
scanf("%d",&n);
printf("请输入您想转化的进制\n");
scanf("%d",&m);
conversion(n,m);
printf("为转化后的数");

}

编译没通过吧?错误比较多。

 typedef struct{
SElemType *base; //应该是指针吧
。。。
(*S).base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));

。。。
(*S).base=(SElemType*)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof(SElemType));
。。。

Status StackEmpty(SqStack *S){//判断栈是否为空
。。。

还有2个错误

 #include"stdio.h"
#include"stdlib.h"
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define NULL 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
typedef int SElemType;
typedef int Status;
typedef struct{
    SElemType *base;
    SElemType *top;//顶指针
    int stacksize;
}SqStack;
Status InitStack(SqStack *S){//构造空栈
    (*S).base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
    if(!(*S).base)exit(OVERFLOW);
    (*S).top=(*S).base;
    (*S).stacksize=STACK_INIT_SIZE;
    return OK;
}
Status StackEmpty(SqStack *S){//判断栈是否为空
    return((*S).top==(*S).base);   //这里改正了
}
Status Push(SqStack *S,SElemType e){
    if((*S).top-(*S).base>=(*S).stacksize){
        (*S).base=(SElemType*)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof(SElemType));
        if(!(*S).base) exit(OVERFLOW);
        (*S).top=(*S).base+(*S).stacksize;
        (*S).stacksize+=STACKINCREMENT;
    }
    *((*S).top)++=e;
    return e;
}
Status Pop(SqStack *S,SElemType *e){
    if((*S).top==(*S).base)return ERROR;
    (*S).top--;
    *e=*((*S).top); //这里改正了
    return OK;
}
void conversion (int Num,int M) {
    SElemType e;
    SqStack S;
    InitStack(&S);      // 构造空栈
    while (Num) {
        Push(&S,Num%M);
        Num = Num/M;
    }
    while (!StackEmpty(&S)) {
        Pop(&S,&e);
        printf ("%d\n", e);
    }
    //printf("\n");
}
int main(){
    int n,m;
    printf("请输入待转化的十进制数\n");
    scanf("%d",&n);
    printf("请输入您想转化的进制\n");
    scanf("%d",&m);
    conversion(n,m);
    printf("为转化后的数");
}