循环链表实现队列触发Bus Error 10,请求故障原因排查
解答:Bus Error 10的根源与修复
Hey Priyam,我帮你找到了代码触发Bus Error 10的问题所在!
问题核心:未初始化的野指针
你在main函数里声明了Node *head;,但没有将它初始化为NULL。这时候head会是一个「野指针」——指向一块随机的、不属于当前进程的内存地址。
当你第一次调用Enqueue(&head, 3)时,Enqueue函数里的判断:
if((*rear) == NULL) { *rear = newNode; return; }
因为head不是NULL(是野指针),所以这个初始化分支不会执行。代码直接走到Node *front = (*rear)->next;,这时候你尝试访问野指针指向的内存的next成员,属于非法内存访问,直接触发了Bus Error 10。
修复方案
只需要在main里给head加上初始化:
Node *head = NULL;
另外,你第三次调用Dequeue时队列已经为空,函数返回-1的逻辑是正常的,不会引发错误,主要问题就是指针未初始化。
内容的提问来源于stack exchange,提问作者Priyam Dhanuka
相关产品推荐
相关产品推荐

