问题描述:
元素在出队时,使用指针来存储出队元素。
int Out_SeQueue(CSeQueue *q,int *x)
{//出队
if(q->rear==q->font)
return -1;//队空
else{
q->font=(q->font+1)%n;
*x=q->data[q->font];
return 1;
}
}
int main()
{
int *x;
int data;
cin>>data;
In_SeQueue(q,data,n);
Out_SeQueue(q);
}
但是,并没有元素出队,debug调试一下,发现问题在*x=q->data[q->font];
调试时,还会报如下错误:
原因分析:
最后,经过查找和问老师,发现问题是因为主函数中定义了*x,但是我并没有初始化,所以发生了bug。
解决方案:
int Out_SeQueue(CSeQueue *q,int *x)
{//出队
if(q->rear==q->font)
return -1;//队空
else{
q->font=(q->font+1)%n;
*x=q->data[q->font];
return 1;
}
}
int main()
{
int *x=NULL; //先给指针初始化为空
int data;
cin>>data;
In_SeQueue(q,data,n);
Out_SeQueue(q);
}
通过这个bug,我认识到只要定义指针就得先给它初始化,以免在某个代码中报错,让你百思不得其解。指针必须先初始化!