数据结构:循环队列(c语言)

小白求问,
程序有问题,测试发现在 Q.pBase[Q.rear]=e;这一条语句执行的时候出错。百思不得其解呀....

 typedef struct queue
{
    int *pBase;
    int front;    //指向队列第一个元素
    int rear;    //指向队列最后一个元素的下一个元素
    int maxsize; //循环队列的最大存储空间
}Queue;
void InitQueue(Queue Q,int maxsize)
{
    Q.pBase=(int *)malloc(sizeof(int)*maxsize);
    if(NULL==Q.pBase)
    {
        printf("Memory allocation failure");
        exit(-1);        //退出程序
    }
    Q.front=0;         //初始化参数
    Q.rear=0;
    Q.maxsize=maxsize;
}
int Enqueue(Queue Q, int e)
{
    if(QueueFull(Q))
        return 0;
    else
    {
        Q.pBase[Q.rear]=e;
        Q.rear=(Q.rear+1)%Q.maxsize;
        return 1;
    }
}
int QueueFull(Queue Q)
{
    if(Q.front==(Q.rear+1)%Q.maxsize)
        return 1;
    else
        return 0;
}
int main()
{
    Queue Open;
    InitQueue(Open,10);
    Enqueue(Open,12);
    QueueTraverse(Open);
}

int Enqueue(Queue Q, int e)
Q是值传递,导致 Open没有被初始化,所以Q.pBase和Q.rear其实是什么不知道

函数参数改成结构体指针