C语言数据结构运行出现Process exited with return value 3221225477

实现链队列的初始化,销毁、判断队列是否为空,取队头元素,入队,出队等操作。
不知道为什么出错了,编译的时候无报错无警告,但是一运行就不行,
会出现这个提示信息Process exited with return value 3221225477

#include
#include

#define OK 1
#define ERROR 0

typedef int Status;
typedef int QElemType;

typedef struct QNode
{
    QElemType data;
    struct QNode *next;
}QNode,*QueuePtr;

typedef struct
{
    QueuePtr front;
    QueuePtr rear;
}LinkQueue;

//初始化 
Status InitQueue(LinkQueue &Q)
{
    Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
    if(!Q.front)
    {
        return ERROR;
    }
    Q.front = Q.rear = NULL;
    return OK;
}

//销毁 
Status DestroyQueue(LinkQueue &Q)
{
    while(Q.front)
    {
        Q.rear = Q.front->next;
        free(Q.front);
        Q.front = Q.rear;
    }
    return OK;
}

//判空 
Status QueueEmpty(LinkQueue Q)
{
    return (Q.front == Q.rear);
} 

//取队头元素 
Status GetHead(LinkQueue Q,QElemType &e)
{
    if(Q.front == Q.rear)
    {
        return ERROR;
    }
    e = Q.front->next->data;
    return OK;
}

//入队 
Status EnQueue(LinkQueue &Q,QElemType e)
{
    QueuePtr p;
    p = (QueuePtr)malloc(sizeof(QNode));
    if(!p)
    {
        return ERROR; 
    }
    p->data = e;
    p->next = NULL;
    Q.rear->next = p;
    Q.rear = p;
    return OK;
} 

//出队
Status DeQueue(LinkQueue &Q,QElemType &e)
{
    if(Q.front == Q.rear)
    {
        return ERROR;
    }
    QNode *p;
//    QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
//    if(!p)
//    {
//        return ERROR; 
//    }
    p = Q.front->next;
    e = p->data;
    Q.front->next = p->next;
    if(Q.rear == p)
    {
        Q.rear = Q.front;
    } 
    free(p);
    return OK;
} 

int main()
{
    LinkQueue Q;
    QElemType e;
    InitQueue(Q);
    QueueEmpty(Q);
    printf("输入链队列元素\n");
    for(int i=0;e!='\n';i++)
    {
        scanf("%d",&e);
        EnQueue(Q,e);
    }
//    EnQueue(Q,1);
//    EnQueue(Q,2);
//    EnQueue(Q,3);
//    EnQueue(Q,4);
//    EnQueue(Q,5);
//    DeQueue(Q,e);
//    GetHead(Q,e);
//    DestroyQueue(Q);
    return OK;
} 

初始化函数里面,已经malloc赋值了为啥还需要下面的代码
Q.front = Q.rear = NULL; 变成NULL后面都用不了。
这样后面引用都是空了,程序应该是跑飞了