链表中的原因分段错误

时间:2012-12-19 06:55:02

标签: linked-list

#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循环将终止并打印值。

然而,代码在请求输入数据并在获取数据之后给出了分段错误。我无法解决,是什么原因?

1 个答案:

答案 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;
}