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

但是,当它要求输入数据和获取数据之后,代码给了我分段错误。解决不了,请问是什么原因?

4

1 回答 1

0

你在这里得到未初始化的指针。如果您定义到下一个节点的链接,Node *next;您应该在使用前用地址初始化指向有效节点对象的指针。

Node* head = NULL;
...
Node*m = head;
...
m -> data = data; // NPE

如您所见,您试图调用dataNULL 对象的成员。

如何解决: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;
}
于 2012-12-19T07:11:32.660 回答