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

C++链表头部插入节点异常:输出无限重复相同内容问题

问题根源

你的insertAtHead函数存在致命错误:用局部栈变量创建链表节点。

看这段出错的代码:

Node* CL::insertAtHead(string name)
{
Node temp;
temp.name = name;
temp.Next = head;
head = &temp;
}
  • Node temp是函数内的局部变量,存储在栈内存中,函数执行完毕后,该变量会被销毁,对应的内存会被系统回收。
  • 你把链表的head指向了这个局部变量的地址,导致head变成悬空指针(指向已释放的无效内存)。
  • 第二次调用insertAtHead("a")时,新创建的局部temp大概率会复用之前temp的内存地址。此时temp.Next被设置为之前的head(也就是同一个地址),最终形成自引用循环:当前节点的Next指向自己,所以displayList的循环永远无法终止,无限输出"a"。
修复方案

必须用动态内存分配(new关键字)创建节点,节点会存储在堆内存中,函数结束后不会被销毁:

修改后的insertAtHead函数:

Node* CL::insertAtHead(string name)
{
    Node* temp = new Node; // 动态分配堆内存
    temp->name = name;
    temp->Next = head;
    head = temp;
    return temp; // 可选,返回新节点指针
}
额外注意事项
  • 链表不再使用时,要遍历释放每个节点的堆内存,避免内存泄漏。可以给CL类添加析构函数:
~CL() {
    Node* current = head;
    while (current != nullptr) {
        Node* next = current->Next;
        delete current;
        current = next;
    }
    head = nullptr;
}
  • C++中建议用nullptr代替NULL,类型安全性更高。
修复后的完整代码示例
#include <iostream>
#include <string>
using namespace std;

class Node {
public:
    string name;
    Node* Next;
};

class CL {
public:
    Node* head;

public:
    CL(void) { head = nullptr; } // 用nullptr替代NULL
    Node* insertAtHead(string name);
    void displayList(void);
    ~CL(); // 析构函数,负责释放链表内存
};

Node* CL::insertAtHead(string name)
{
    Node* temp = new Node;
    temp->name = name;
    temp->Next = head;
    head = temp;
    return temp;
}

void CL::displayList(void){
    Node* t = head;
    while(t != nullptr){
        cout << t->name << endl;
        t = t->Next;
    }
}

CL::~CL() {
    Node* current = head;
    while (current != nullptr) {
        Node* next = current->Next;
        delete current;
        current = next;
    }
    head = nullptr;
}

int main()
{
    CL poliop;
    poliop.insertAtHead("am");
    poliop.insertAtHead("a");
    poliop.displayList();
    // 程序结束时析构函数自动调用,释放所有节点内存
}

运行后输出符合预期:

a
am

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:01:06