#include <iostream>
#include <string>
using namespace std;
struct Node{
Node *next;
int data;
};
int main(){
Node* head = NULL;
int data;
cin >> data;
Node*m = head;
while(data >0){
cout <<"enter a data";
cin >> data;
m -> data = data;
m -> next = m;
}
while(m -> next != NULL){
cout << m -> data << endl;
}
return 0;
}
这是一个简单的代码,它在大于0时获取值并创建一个链表。输入负值后,while循环将终止并打印值。
然而,代码在请求输入数据并在获取数据之后给出了分段错误。我无法解决,是什么原因?
答案 0 :(得分:0)
你在这里获得未初始化的指针。如果将下一个节点的链接定义为Node *next;
,则应在使用前将带有地址的指针初始化为有效的Node对象。
并且
Node* head = NULL;
...
Node*m = head;
...
m -> data = data; // NPE
如您所见,您尝试调用NULL对象的成员data
。
如何修复它: Anways使用有效地址初始化指针。例如:
int main(){
Node head;
head.next = NULL;
int data;
cout << "enter a data ";
cin >> data;
Node *prev = &head;
prev->data = data;
while(data >0){
Node *next = new Node();
cout <<"enter a data ";
cin >> data;
next->data = data;
next->next = NULL;
prev->next = next;
prev = next;
}
Node* m = &head;
while(m -> next ){
cout << m -> data << endl;
m = m->next;
}
return 0;
}