请问一个关于栈的有关问题。c语言版

请教一个关于栈的问题。c语言版
# include <stdio.h>
# include "malloc.h"
# define STACK_INIT_SIZE 100
# define STACKINCREMENT 10
typedef struct {
int *top;
int *base;
int stacksize;
}Sqstack;
int Initstack(Sqstack *s)//建立一个有100个数据的栈
{
s->base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));//分配空间
if(!s->base)
return 0;
s->base=s->top;
s->stacksize=STACK_INIT_SIZE;
return 1;
}
void Freestack(Sqstack *s)//释放栈
{
free(s->base);
}
void Pushelem(Sqstack*s,int elem)//往栈里面插入元素
{
if(s->top-s->base>=s->stacksize)//如果栈满的话。再分配空间
{
s->base=(int*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(int));
if(!s->base)
return ;
s->top=STACK_INIT_SIZE+s->base;
s->stacksize+=STACKINCREMENT;
}
*(s->top)=elem;
s->top++;
}
void Printelem(Sqstack*s)//输出栈里面的内容
{
int *p;
p=s->base;
if(s->top==s->base){
printf("这是一个空栈\n");
return ;
}
while(p<=s->top){
printf("%3d",*p++);
}
}
void main()
{
Sqstack s;
Initstack(&s);
int i;
for(i=0;i<10;i++)
Pushelem(&s,i);
Printelem(&s);
free(&s);
}
高手帮我看看哪里错了。怎么不能运行啊

------解决方案--------------------
void Pushelem(Sqstack*s,int elem)//往栈里面插入元素
{
s=(Sqstack*)malloc(sizeof(Sqstack));
//首先,你有指针没分配内存就用,接着的问题 你自己单步跟踪下吧

if(s->top-s->base>=s->stacksize)//如果栈满的话。再分配空间
{
s->base=(int*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(int));
if(!s->base)
return ;
s->top=STACK_INIT_SIZE+s->base;
s->stacksize+=STACKINCREMENT;
}
*(s->top)=elem;
s->top++;
}

------解决方案--------------------
C/C++ code

void Printelem(Sqstack*s)//输出栈里面的内容
{
    int *p;
    p=s->base;
    if(s->top==s->base){
        printf("这是一个空栈\n");
        return ;
    }
    while(p<s->top){  /*这里改为p<s->top*/
        printf("%3d",*p++);
    }
}

------解决方案--------------------
还有,建议楼主当分配内存失败时,用exit直接退出.
主函数调用Initstack函数,该函数执行,分配失败return;还会返回到main函数中继续执行后面的操作。
其实没必要了,栈的空间分配都失败了,下面的操作就没意义了.
C/C++ code

int Initstack(Sqstack *s)//建立一个有100个数据的栈
{
    s->base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));//分配空间
    if(!s->base) {
        exit(1);  //mark
        //return 0;
    }
    s->top=s->base;//这个地方错了主要是
    s->stacksize=STACK_INIT_SIZE;
    return 1;
}

------解决方案--------------------
帮朋友,高手给楼主讲讲啊!定
------解决方案--------------------
[code=C/C++][/code]# include <stdio.h>
# include "malloc.h"
# define STACK_INIT_SIZE 100
# define STACKINCREMENT 10
typedef struct {
int *top;
int *base;
int stacksize;
}Sqstack;
int Initstack(Sqstack *s)//建立一个有100个数据的栈
{
s->base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));//分配空间
if(!s->base)
return 0;
s->top=s->base;//这个地方错了主要是
s->stacksize=STACK_INIT_SIZE;
return 1;
}
void Freestack(Sqstack *s)//释放栈
{
free(s->base);
}
void Pushelem(Sqstack*s,int elem)//往栈里面插入元素
{
if(s->top-s->base>=s->stacksize)//如果栈满的话。再分配空间
{
s->base=(int*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(int));
if(!s->base)
return ;
s->top=STACK_INIT_SIZE+s->base;
s->stacksize+=STACKINCREMENT;
}