用栈实现的进制转换,编译没问题,运行时总是停止运行

#include
#include
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW 0
typedef int Status,SElemType;
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 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 OK;
}
Status Pop(SqStack S,SElemType e) //出栈
{
if(S.top==S.base) //判断栈空
return ERROR;
e=
--S.top;
return OK;
}
Status StackEmpty(SqStack S)
{
if(S.top==S.base)
return TRUE;
else return FALSE;
}
int main()
{
int n,m,e;
SqStack S;
InitStack(S);
printf("请输入一个非负十进制整数:");
scanf("%d",&n);
printf("请输入你要转换的进制:");
scanf("%d",&m);
while(n)
{
Push(S,n%m);
n=n/m;
}
while(!StackEmpty(S))
{
Pop(S,e);
printf("%d",e);
}
return 0;
} 图片说明

你所有的函数都应该传入指针形式才行,你之前的写法形参和实参代表的并不是同一个变量,所以程序无法运行
图片说明

 #include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW 0
typedef int Status,SElemType;
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 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 OK;
}
Status Pop(SqStack *S,SElemType *e)  //出栈 
{
    if(S->top==S->base)   //判断栈空 
      return ERROR;
    *e=*--S->top;
    return OK;
}
Status StackEmpty(SqStack *S)
{
    if(S->top==S->base)
      return TRUE;
    else return FALSE;
}
int main()
{
    int n,m,e;
    SqStack S;
    InitStack(&S);
    printf("请输入一个非负十进制整数:");
    scanf("%d",&n);
    printf("请输入你要转换的进制:");
    scanf("%d",&m);
    while(n)
    {
        Push(&S,n%m);
        n=n/m;
    }
    while(!StackEmpty(&S))
    {
        Pop(&S,&e);
        printf("%d",e);
    }
    return 0;
}

http://blog.csdn.net/kkkkkxiaofei/article/details/8290692
http://blog.csdn.net/qq844352155/article/details/25110377

建议你把代码放在“代码插入区”,不然这样谁看到清楚;