请问为什么循环队列这段代码会爆出Segmentation fault的错误啊?
#include <iostream>
#include <cmath>
using namespace std;
struct elem
{
int *arr;
int maxSize;
int front,rear;
};
void create(elem *p,int a)
{
p->arr=new int [a];
p->maxSize=a;
p->front=p->rear=0;
}
void clear(elem *p)
{
delete [] p->arr;
}
bool isEmpty(elem *p)
{
return p->front==p->rear;
}
void doubleSpace(elem *p)
{
int *tmp=p->arr;
p->arr=new int [2*(p->maxSize)];
for (int i=1;i<p->maxSize;++i) p->arr[i]=tmp[(p->front+i)%p->maxSize];
p->front=0;p->rear=p->maxSize-1;
(p->maxSize)*=2;
delete tmp;
}
void deQueue(elem *p)
{
if(!isEmpty(p))
{p->front = (p->front+1)%p->maxSize;
cout << p->front <<' '<<abs((p->rear)-(p->front))<<endl;
}
else {
cout << p->front <<' '<<abs((p->rear)-(p->front))<<endl;
}
}
void enQueue(elem *p,int i)
{ if((p->rear+1)%p->maxSize==p->front) doubleSpace(p);
p->rear=(p->rear+1)%p->maxSize;
p->arr[p->rear]=i;
cout << p->rear <<' '<<abs((p->rear)-(p->front))<<endl;
}
int getHead (elem *p)
{
return p->arr[(p->front+1)%p->maxSize];
}
int main()
{ elem *p;
int m,n,b;
cin >> m >> n;
create (p,m);
b=n;
while (b-->0)
{
int i;
cin>>i;
switch(i){
case 0: int x;
cin>>x;
enQueue(p,x);break;
case 1:deQueue(p);break;
}
}
clear (p);
return 0;
}