为什么 出队的时候会出错


//顺序存储的队列
#include<stdio.h>
#include<stdlib.h> 
#define ElemType int
#define MaxSize 10 
//定义队列储存类型
typedef struct Qnode{
    ElemType data[MaxSize];
    int front;
    int rear;     
}*SqQueue,queue;
 
//初始化队列
bool InitQueue(SqQueue &q){            //传引用更加方便 
    q = (SqQueue)malloc(sizeof(queue));
    q->front=q->rear=0;
    printf("初始化成功!\n"); 
    return true;
}



//判断队列是否为空
bool QueueEmpty(SqQueue q){
    if(q->front==q->rear)
    return true;
    return false; 
} 


//入队操作

bool EnterQueue(SqQueue q,ElemType x){
    if((q->rear+1)%MaxSize==q->front)
    return false;
    q->data[q->rear] = x;
    q->rear = (q->rear+1)%MaxSize;
    return true;
} 


//出队操作
bool OutQueue(SqQueue q,ElemType &j){   //j用来保存出队数据 引用传递 
    if(QueueEmpty)
    return false;
    j = q->data[q->front];
    q->front=(q->front+1)%MaxSize;
    return true; 

}  
 
 
 
 
 
 
int main(){
    
    SqQueue q;
    int j,x;
    scanf("%d",&x);
    InitQueue(q);
    if(QueueEmpty(q))
    printf("队列为空\n"); 
    if(EnterQueue(q,x))
    printf("入队成功\n");
    for(int i =0 ;i<q->rear;i++)
    printf("%d\n",q->data[i]); 
    if(OutQueue(q,j))
    printf("kon");
    printf("%d",j);
    
    return 0;
}

66行 参数q少了