2016-02-19 32 views
-2

我试图通过它创建一个简单的链接列表和变量。不过,我在一个我认为不会得到的地方开了段错误。这里是我的代码C++ - 创建链接列表时出现段错误

#include <iostream> 
    #include <string> 
    using namespace std; 

    struct Node { 
    string name; 
    Node *next; 
    }; 

    int main() { 
    Node *one; 
    one->name = "one"; 
    Node *two; 
    two->name = "two"; 
    Node *three; 
    three->name = "three"; 

    Node *reader = one; 
    while (reader != NULL) { 
     cout << reader->name << endl; 
     reader = reader->next; 
    } 
    } 

我增加了一些COUT的在我的代码,并意识到段错误是后

one->name = "one"; 

我不是很用C++经历了发生的事情,但我认为发生了段错误时,堆栈在内存中溢出。我不明白该程序应该如何在那里耗尽内存。 我很感激任何帮助找出问题。谢谢。

+2

您从未为您的'node *'指针分配内存。 –

+0

你需要更少的星星,更少的矩形和莫尔圆点。 –

+0

*我对C++不是很有经验* - 那么得到一本好的C++书籍并通读这些示例是一个不错的主意,通过这些示例了解所有内容。你正在犯一个根本性的错误,没有好书可以说明。 – PaulMcKenzie

回答

2

您创建了一个指向节点的指针,但是您从不创建节点对象。

使用

Node* one = new Node(); 

,并在程序的最后不要忘了delete one;

基本上你已经为指向Node的指针分配了内存,但内容是内存中的一些随机地址。您需要实际创建一个Node对象并将其地址指定给您的指针。如果没有,你试图解引用一个随机地址。 (将其与int i;进行比较,如果未初始化,它将随机保存int