链接列表实现崩溃
Linked List Implementation is crashing
我正在尝试在 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;
}
LinkedList *Head, *node1, *node2, *node3, *node4;
仅仅在 C++ 中声明一个指针并不意味着它指向任何东西。您需要初始化它们,以便它们指向内存中的有效地址。通常,这将使用 new
或通过静态分配它们,然后在需要将它们传递给需要指针的函数时获取它们的地址。
作为样式说明,当您看到类似以下内容时:
Head->traverseList(Head);
transverseList
不需要成为LinkedList
的成员函数。它作为一个独立的功能效果更好。
我正在尝试在 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;
}
LinkedList *Head, *node1, *node2, *node3, *node4;
仅仅在 C++ 中声明一个指针并不意味着它指向任何东西。您需要初始化它们,以便它们指向内存中的有效地址。通常,这将使用 new
或通过静态分配它们,然后在需要将它们传递给需要指针的函数时获取它们的地址。
作为样式说明,当您看到类似以下内容时:
Head->traverseList(Head);
transverseList
不需要成为LinkedList
的成员函数。它作为一个独立的功能效果更好。