C语言版 顺序栈的销毁问题

#include<stdio.h>
#include<stdlib.h>
 
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define MAXSIZE 100
 
typedef int ElemType;
typedef int Status;
 
/* 顺序栈的存储结构 */
typedef struct{
    int *top;   // 栈顶指针
    int *base;  // 栈底指针
    int stackSize;  // 最大容量
}SqStack;
 
/**
 * @brief 初始化顺序栈
 */
Status initStack(SqStack *s){
    s->base = (ElemType*)malloc(sizeof(ElemType));
    if(!s->base)    return ERROR;
    s->top = s->base;
    s->stackSize = MAXSIZE;
    return OK;
}
 
Status destroyStack(SqStack *s){
     if(s->base){
        // 清楚base指向的内存单元
        free(s->base);
        s->stackSize = 0;
        s->base = s->top = NULL;
    }
    return OK;
}
 
/**
 * @brief 入栈
 */
Status push(SqStack *s,int e){
    if((s->top-s->base) == s->stackSize)    return ERROR;
    *s->top = e;
    s->top++;
}
 
/**
 * @brief 出栈
 */
Status pop(SqStack *s,int e){
    if(s->top == s->base)   return ERROR;
    --s->top;
    e = *s->top;
}
 
/**
 * @brief 遍历顺序栈
 */
Status displayStack(SqStack s){
    if(s.top == s.base) return ERROR;
 
    while(s.base < s.top){
        printf("%d ",*(s.base++));
    }
    printf("\n");
}
 
/**
 * @brief Get the Length object 获取顺序栈的长度
 */
int getLength(SqStack s){
    return s.top - s.base;
}
 
int main(){
    SqStack stack;
    ElemType e;
    // 初始化
    initStack(&stack);
    // 入栈
    push(&stack,5);
    push(&stack,8);
    push(&stack,0);
    push(&stack,3);
    push(&stack,9);
    // 遍历
    printf("displayStack: ");
    displayStack(stack);
    // 清空 获取长度
    destroyStack(&stack);
    printf("getLength: %d\n",getLength(stack));
}

请问此处执行【销毁】函数时,为什么总是【卡在free那一行】呢?

看了代码好像没有错误的地方,请各位指教。

没有问题,我运行了下:

img