【问题标题】:C++ - Getting segfault while creating a Linked ListC++ - 创建链接列表时出现段错误
【发布时间】:2016-06-01 17:32:22
【问题描述】:

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

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

【问题讨论】:

  • 您从未为node* 指针分配内存。
  • 你需要更少的星星,更少的arrers和moar dots。
  • 我在 C++ 方面的经验不是很丰富 -- 那么最好买一本好的 C++ 书籍并阅读示例,边读边理解所有内容。你犯了一个没有好书能说明的根本性错误。

标签: c++ list segmentation-fault


【解决方案1】:

你创建了一个指向 Node 的指针,但你从来没有创建一个 Node 对象。

使用

Node* one = new Node();

不要忘记在程序结束时delete one;

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

【讨论】:

    猜你喜欢
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    相关资源
    最近更新 更多