关于链栈的操作是哪里出了错误


#include
#include /* malloc()等 */
#include
#include
#include /* exit() */
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */
typedef int ElemType;
typedef struct LinkStackNode{
 ElemType data;
 struct LinkStackNode *next;
 }LinkStack;
 //构造空栈
 void InitLinkStack(LinkStack *L){
    L = (LinkStack *) malloc(sizeof(LinkStack));//申请内存
    if(!L->data) exit(OVERFLOW);//申请失败
    L->next = NULL;
}
//删除
void DestroyLinkStack(LinkStack *L){
    LinkStack *p;
    LinkStack *q;
    p=L;
    q=L->next;
    while(p!=NULL){
        free(p);
        p=q;
        p=p->next;
    }
    free(q);

}
Status StackLinkEmpty(LinkStack *L)
{
    if(L->next==NULL)
        return TRUE;
    else
        return FALSE;
}
//长度
int StackLength(LinkStack *L){
LinkStack *p;
int i=0;
p=L;
while(p!=NULL){
    i++;
    p=p->next;
}
return i;
}
//取栈顶
Status GetTop(LinkStack *L, ElemType *e)
{   if(L->next==NULL)
    return ERROR;
    *e = L->next->data;
    return OK;
}
//进栈
 void Push(LinkStack *L,ElemType e){
  LinkStack *p;
    p = (LinkStack *) malloc(sizeof(LinkStack));
    p->data = e;
    p->next = L->next;
    L->next = p;
    printf("%d ",e);
 }
 //出栈
 void Pop(LinkStack *L,ElemType e){
 LinkStack *p = L->next;
    e = p->data;
    L->next = p->next;
    free(p);
 }
 //遍历
 void StackTraverse(LinkStack *L){
 LinkStack *p=L;
 while(p){
    p=p->next;
    printf("%d",p->data);
 }
 printf("\n");
 }
int main(){
 LinkStack L;
 ElemType e;
 int j;
 InitLinkStack(&L);
for(j=1;j<=12;j++)
 Push(&L,j);
  printf("栈中元素依次为:");
  StackTraverse(&L);
  Pop(&L,e);
   printf("弹出的栈顶元素 e=%d\n",e);
   printf("栈空否:%d(1:空 0:否)\n",StackLinkEmpty(&L));
   GetTop(&L,&e);
   printf("栈顶元素 e=%d 栈的长度为%d\n",e,StackLength(&L));
   DestroyLinkStack(&L);
    return 0;
 }


img

后面的操作为什么没继续进行了呢