写了一个栈的创造与插入栈顶元素的程序,无法运行,高手们给帮忙看看呗

写了一个栈的创建与插入栈顶元素的程序,无法运行,高手们给帮忙看看呗
#include<stdio.h>
#include<malloc.h>
#define M 100
#define N 10
struct sqstack 
{
int *base;
int *top;
int stacksize;
};
int initstack(struct sqstack s)
{
s.base=(int *)malloc(M*sizeof(int));
if(s.base==NULL)
{
printf("creat error\n");
  return(0);
}
s.base=s.top;
s.stacksize=M*sizeof(int);
return 1;
}


int pushstack(int e,struct sqstack b)
{
  if(((b.top-b.base)>b.stacksize)||((b.top-b.base)==b.stacksize))
{
printf("sqtack full\n");
b.base=(int *)realloc(b.base,(b.stacksize+N)*sizeof(int));
  if(b.base==NULL)
{
printf("realloc error\n");
return(0);
}
b.top=b.base+b.stacksize;//给栈重新分配空间后,栈顶指针的位置变了,所以要使栈顶指针回到原来的位置就要在栈底指针指向的地址上加上之前的栈空间大小 
b.stacksize=b.stacksize+N;//新的栈大小
}
b.top++;
*(b.top)=e;
printf("push suceed\n");
return 1;

}

void main()
{

struct sqstack a;

initstack(a);
pushstack(2,a);
printf("suceed\n");

}

运行的时候界面显示一个sqstack full 然后就停止运行了 自己看不出问题所在

------解决方案--------------------
我运行显示的是a没有被初始化,你看看按这个错误改改试试
------解决方案--------------------
s.base=s.top; 改成 s.top = s.base;
------解决方案--------------------
函数initstack()有问题:
C/C++ code
int initstack(struct sqstack* s)
{
    s->base = (int *)malloc(M * sizeof(int));
    if(s->base == NULL)
    {
        printf("creat error\n");
        return(0);
    }
    s->top = s->base;
    s->stacksize = M * sizeof(int);
    return 1;
}