You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用remove_Queue删除队列元素后打印出现无效值-572662307的原因

删除队列元素后输出垃圾值的原因分析

核心问题:参数传递导致全局指针未更新

你的remove_Queue函数中,front和back是按值传递的局部变量——函数内部对这两个指针的修改只会作用于局部副本,完全不会改变全局的front和back指针。

当队列只有一个元素时:

  1. 函数内部删除了front指向的节点,并把局部的front设为NULL,但全局的front仍然指向已经被delete的内存地址。
  2. 代码里的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:01:24