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

C++链表代码输入字符串后display方法无法显示内容问题咨询

问题排查

你的代码核心问题既不是字符串赋值逻辑错误,也不是链表节点的string实现异常,是类成员指针未初始化导致的未定义行为,具体问题如下:

  • 核心问题:MovieList类没有定义构造函数,成员变量head是野指针,不会默认初始化为NULL
    你在appendNode里判断if (!head)时,野指针的值是随机的,大概率不满足判断条件,程序会直接进入else分支,拿着野指针nodePtr = head去遍历内存,在while (nodePtr->next)这一步访问非法内存,被操作系统直接终止,所以你看不到后续displayList的输出,看起来就像输入后直接退出。
  • 次要问题:头文件引入错误,你引入的<string.h>是C语言处理char*字符串的头文件,C++的std::string需要引入<string>头才符合规范,部分编译器如果没有隐式引入可能会引发异常。
修复方案
  1. 给MovieList类添加构造函数,初始化head为nullptr(C++11及以后版本推荐用nullptr代替NULL)
  2. 把头文件<string.h>替换为<string>
  3. 可选补充:添加析构函数释放链表内存,避免内存泄漏

修复后可正常运行的代码如下:

#include <iostream>
// 替换原string.h为C++标准string头
#include <string>

using namespace std;

class MovieList {
    private:
    struct MovieNode {
        string title;
        struct MovieNode *next;
    };

    MovieNode *head;
       
    public:
    // 新增构造函数初始化head指针
    MovieList() : head(nullptr) {}
    // 可选新增析构函数释放链表内存,避免泄漏
    ~MovieList() {
        MovieNode* curr = head;
        while (curr) {
            MovieNode* next = curr->next;
            delete curr;
            curr = next;
        }
    }
    void appendNode(string var);
    void displayList();
};
    
void MovieList::appendNode(string var) {
    MovieNode *newNode, *nodePtr;

    newNode = new MovieNode;
    newNode->title = var;
    newNode->next = nullptr;

    if (!head) {
        head = newNode;
    }
    else {
        nodePtr = head;

        while (nodePtr->next)
            nodePtr = nodePtr->next;

        nodePtr->next = newNode;
    }

    cout << endl << "Input has been successfull!" << endl;
}

void MovieList::displayList() {
    MovieNode *nodePtr;

    if (head == nullptr) {
        cout << "The list is empty!" << endl;
    }
    else {
        cout << "The nodes in the List are... " << endl;
        nodePtr = head;
        while (nodePtr) {
            cout << nodePtr->title << endl;
            nodePtr = nodePtr->next;
        }
    }
}

int main() {
    MovieList list;
    string var;
    cout << " << Enter Movie >> " << endl << endl;
    cout << "Enter a movie: ";
    getline(cin, var);
    list.appendNode(var);
    list.displayList();
    return 0;
}

内容的提问来源于stack exchange,提问作者joseph renzo navarrosa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:54:03