【问题标题】:Linked List Implementation is crashing链表实现正在崩溃
【发布时间】:2021-12-24 17:58:58
【问题描述】:

我正在尝试在 C++ 中实现链接列表,当我使用 new 运算符创建链接列表对象(例如 LinkedList *Head = new LinkedList; 等)时,链接列表可以正常工作。但是如果我使用普通的指针对象声明(例如 LinkedList *Head、*node1、*node2、*node3、*node4;),程序就会崩溃。谁能解释一下这次崩溃的原因?

下面是代码:

#include<iostream>
using namespace std;

struct LinkedList {
    int data;
    struct LinkedList* next;
    //Constructor


    // Traversing the Linked List
    void traverseList(struct LinkedList* Head) {
        cout << "The Linked List Elements are: " << endl;
        while (Head != NULL) {
            cout << Head->data << endl;
            Head = Head->next;
        }
    }
};

int main() {
    // LinkedList *Head = new LinkedList;
    // LinkedList *node1 = new LinkedList;
    // LinkedList *node2 = new LinkedList;
    // LinkedList *node3 = new LinkedList;
    // LinkedList *node4 = new LinkedList;

    LinkedList *Head, *node1, *node2, *node3, *node4;

    Head->data = 10;
    Head->next = node1;
    node1->data = 20;
    node1->next = node2;
    node2->data = 30;
    node2->next = node3;
    node3->data = 40;
    node3->next = node4;
    node4->data = 50;
    node4->next = NULL;

    Head->traverseList(Head);

    return 0;
}

【问题讨论】:

  • Head-&gt;data = 10; 中你认为Head 指向什么?
  • C++ 不能以这种方式工作。仅仅声明一个指针并不能让它自动指向一个有效的对象。这就是为什么必须通过new 或其他方式将其初始化为指向有效对象的原因。如果你使用的指针没有指向一个有效的对象,你会得到未定义的行为。

标签: c++ linked-list


【解决方案1】:
LinkedList *Head, *node1, *node2, *node3, *node4;

仅仅在 C++ 中声明一个指针并不意味着它指向任何东西。您需要初始化这些,以便它们指向内存中的有效地址。通常,这可以使用 new 或静态分配它们,然后在需要将它们传递给需要指针的函数时获取它们的地址。

作为样式说明,当您看到类似以下内容时:

Head->traverseList(Head);

transverseList 不需要成为LinkedList 的成员函数。它作为一个独立的功能效果更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多