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

如何在C++中正确实现链表类,修复add函数无限添加元素的问题

问题根因

add函数中创建的新节点是栈局部对象,存在生命周期问题:

  • 执行List next (value);时,对象在函数栈帧上分配,add函数执行结束后该内存会被系统自动回收,tail->next = &next;存储的是野指针,访问野指针属于C++未定义行为。
  • 多次调用add时,栈帧的内存地址会复用,所有节点的next指针最终都指向同一块栈内存,遍历链表时就会出现重复输出同一值、甚至无限循环的现象。
修复代码
  1. 修改add函数,改用堆内存分配新节点,手动控制节点生命周期:
void List::add(int value)
{
    List* new_node = new List(value);
    List* tail = this->tail();
    tail->next = new_node;
}
  1. 补充析构函数避免内存泄漏,首先在类定义的public块中添加析构函数声明:
class List {
    // 原有成员不变
    public:
    ~List(); // 新增析构函数声明
    // 原有公有成员不变
};

然后实现析构函数:

List::~List() {
    // 递归释放后续节点,next为NULL时delete操作是安全的无需额外判断
    delete next;
}

修复后执行main函数,输出结果为3 1 2,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 22:24:03