代码运行中出现栈溢出

运行栈溢出

#include 
#include 
#include 

#define MaxSize 512

typedef struct CUS {
    int Arrive;
    int WaitTime;
    int ordinal;
    int BusiTime;
} customer, *Ptr;//顾客属性

typedef struct {
    Ptr win[6];
} windows;//窗口

windows *WinQ;

customer que[MaxSize];

int main() {
    int front = 0, rear = -1;
    WinQ = (windows*)malloc(sizeof(windows));
    int n, Tnum, ordi = 1, cusnum = 0, winnum = 3, tool;
    scanf ("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &Tnum);
        for (int j = 0; j < Tnum; j++) {
            que[++rear].Arrive = i+1;
            que[rear].ordinal = ordi;
            scanf("%d", &que[rear].BusiTime);
            que[rear].WaitTime = 0;
            ordi++;
            cusnum++;
        }//入队
        if (cusnum/7 >= winnum && winnum < 5)
            winnum++;
        for (int k = 0; k < winnum; k++) {
            if(WinQ->win[k]->BusiTime == 0) {
                WinQ->win[k] == NULL;
                cusnum--;
            }
            if(WinQ->win[k] == NULL && front != rear-1) {
                printf("%d : %d\n", que[front].ordinal, que[front].WaitTime);
                WinQ->win[k] = &que[front];
                front++;
            }//出队后到窗口
            WinQ->win[k]->BusiTime--;
        }
        if (cusnum/7 < winnum && winnum > 3)
            winnum--;
        for (tool = front; tool != rear+1; tool++) {
            que[tool].WaitTime++;
        }

    }
    while (front != rear-1) {
        for (int k = 0; k < winnum; k++) {
            if(WinQ->win[k]->BusiTime == 0) {
                WinQ->win[k] == NULL;
                cusnum--;
            }
            if(WinQ->win[k] == NULL && front != rear-1) {
                printf("%d : %d\n", que[front].ordinal, que[front].WaitTime);
                WinQ->win[k] = &que[front];
                front++;
            }
            WinQ->win[k]->BusiTime--;
        }
        if (cusnum/7 < winnum && winnum > 3)
            winnum--;
        for (tool = front; tool != rear+1; tool++) {
            que[tool].WaitTime++;
        }

    }
    return 0;
}

自己修改了一下没太搞懂有可能是WinQ出问题了吗。