【问题标题】:unable to assign value to a struct attribute. C++无法为结构属性赋值。 C++
【发布时间】:2021-05-04 19:47:19
【问题描述】:

我正在尝试在 C++ 中实现一个链表。我有以下代码

class LinkedList {

private:
    struct node {
        int   data;
        node* next;
    }*
    head;

    node* mkNode(int data, node* next){
        
        node* n;
        n->data = data;
        n->next = next;

        return n;
    }

public:

    LinkedList(){
        head = NULL;
    }

    void insertAtHead(int data){
        head = mkNode(data, head);
    }
};

我在mkNode() 函数内的n->data = data;n->next = next; 行上得到一个segmentation fault: 11。知道为什么吗?

【问题讨论】:

  • 这是未定义的行为node* n; n->data = data;。在使用之前,您必须将 n 初始化为某个有效的内存地址。
  • 我该怎么做?
  • 分配一个node的有效地址。结构为n.

标签: c++ class pointers struct linked-list


【解决方案1】:
node* mkNode(int data, node* next) 
{
    node* n;
    n->data = data;
    n->next = next;
    return n;
}

指向“节点”的指针“n”未初始化。尝试使用结构节点内存对其进行初始化。

node* n = new struct node;

【讨论】:

    【解决方案2】:

    您的指针未初始化。 在堆上创建一个对象就可以解决这个问题,不要忘记在使用后释放内存。

    node* mkNode(int data, node* next){ return new node({data,next}); }
    

    【讨论】:

      猜你喜欢
      • 2013-08-03
      • 1970-01-01
      • 2016-11-05
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 2021-04-06
      • 2014-05-13
      相关资源
      最近更新 更多