C ++ - 创建链接列表时获取段错误

时间:2016-02-19 23:55:36

标签: c++ list segmentation-fault

我正在尝试通过它创建一个简单的链表和一个变量。但是,我在一个我认为不会得到的地方遇到了一个段错误。这是我的代码

    #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 ++方面不是很有经验,但我认为当堆栈在内存中溢出时会发生段错误。我不知道程序应该在那里耗尽内存。 我很感激找到问题的任何帮助。感谢。

1 个答案:

答案 0 :(得分:2)

您创建一个指向Node的指针,但您永远不会创建一个Node-object。

使用

Node* one = new Node();

并且不要忘记程序结束时的delete one;

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