调用remove_Queue删除队列元素后打印出现无效值-572662307的原因
删除队列元素后输出垃圾值的原因分析
核心问题:参数传递导致全局指针未更新
你的remove_Queue函数中,front和back是按值传递的局部变量——函数内部对这两个指针的修改只会作用于局部副本,完全不会改变全局的front和back指针。
当队列只有一个元素时:
- 函数内部删除了
front指向的节点,并把局部的front设为NULL,但全局的front仍然指向已经被delete的内存地址。 - 代码里的
if (x == 0) back = NULL逻辑完全无效:一是x未在函数内定义(除非是全局变量,但即使是,修改的也是局部back),二是局部back的修改不会同步到全局。
此时调用print_Queue,它会访问全局front指向的已释放内存,读取到的就是内存里的随机垃圾值(-572662307是典型的已释放内存标记值)。
修复方案
把函数参数改成引用传递,让函数内部能直接修改全局指针:
bool remove_Queue(Item& i, Queue*& front, Queue*& back) { if (front == NULL) return false; i = front->value; Queue* tmp = front; front = front->next; delete tmp; // 删除后队列为空,同步更新back指针 if (front == NULL) { back = NULL; } return true; }
调用时直接传入全局的front和back即可,无需依赖额外计数变量x。
内容的提问来源于stack exchange,提问作者JAJAJa Jajajaaa
相关产品推荐
相关产品推荐

