2012-12-19 28 views
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循环终止并打印值。链接列表中的原因分段错误

但是,当代码输入数据并获取数据后,代码会给我提供分段错误。我解决不了,原因是什么?

回答

0

您会在此处获得未初始化的指针。如果你定义到下一个节点的链接为Node *next;你应该在使用前初始化带有地址的指针到有效的节点对象。

而且

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; 
} 
+0

但是,当我写了m = &tmp;它给了我这个错误。 homework.cpp:在函数“廉政的main()”: homework.cpp:24:错误:在分配 –

+0

抱歉,不能将“节点**”到“节点*”。当然它应该是'.',而不是' - >'。这应该工作。 – user1516873

+0

并在'while'中存储堆栈变量不是一个好主意:)增加了工作解决方案。 – user1516873