【发布时间】: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->data = 10;中你认为Head指向什么? -
C++ 不能以这种方式工作。仅仅声明一个指针并不能让它自动指向一个有效的对象。这就是为什么必须通过
new或其他方式将其初始化为指向有效对象的原因。如果你使用的指针没有指向一个有效的对象,你会得到未定义的行为。
标签: c++ linked-list