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

为何调用remove函数后classRosterArray元素仍能被printAll输出?

问题根源分析
  • delete后未清空数组指针:你在remove函数里执行delete只是释放了Student对象占用的内存,但数组中对应位置的指针并没有被设置为nullptr。这块被释放的内存现在是野指针,指向的区域可能还残留着之前的学生数据,所以printAll遍历的时候依然能读到这些残留值,看起来像是学生没被删除。

  • printAll未做空指针判断:你的printAll函数应该是直接遍历整个classRosterArray,没有检查每个元素是否为有效的指针(即是否为nullptr)。不管指针是否已经被释放,都直接访问并输出,导致已经被删除的学生数据依然被打印出来。

修复方案
  • 在remove函数中,delete目标对象后,立刻将数组中对应的指针赋值为nullptr:

    // 找到目标ID对应的数组索引index后
    delete classRosterArray[index];
    classRosterArray[index] = nullptr; // 关键:清空指针
    
  • 修改printAll函数,遍历数组时先判断当前元素是否为nullptr,只有非空的指针才执行输出操作:

    for (int i = 0; i < maxSize; ++i) {
        if (classRosterArray[i] != nullptr) { // 先检查指针有效性
            classRosterArray[i]->print();
        }
    }
    

内容的提问来源于stack exchange,提问作者Hammerspace

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:05:23