链表实现正在崩溃



我正试图在C++中实现链表,当我使用新运算符创建链表对象时(例如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;
}
LinkedList *Head, *node1, *node2, *node3, *node4;

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

作为一种风格,当你看到这样的东西时:

Head->traverseList(Head);

CCD_ 2不需要是CCD_ 3的成员函数。它作为一个独立的函数工作得更好。

最新更新