返回指针时出现分段错误

Segmentation fault while returning a pointer

本文关键字:分段 错误 指针 返回      更新时间:2023-10-16

所以这是将新元素插入链表的代码。它采用第一个节点的地址和要插入的整数数据。但是当我返回第一个节点的地址时,我得到了Segfault。我读过其他类似的问题,但 OP 返回了一个指向局部变量的指针。在这里,我实际上返回了一个本地指针。

 struct Node
 {
    int data;
    struct Node *next;
 }
 Node* Insert(Node *head,int data)
 {   
    Node* temp=head;
    Node* return_value=temp;
    cout<<head<<"  ";
    while(temp!=NULL && temp->next!=NULL)
    {
        temp=temp->next;
    }
    Node new_obj;
    if(temp==NULL)
    {
        temp=&new_obj;
        temp->data=data;
        cout<<temp<<" "<<temp->data<<" ";
        return(temp);
    }
Node new_obj

堆栈上创建一个对象,而不是堆。 当Insert退出时,该对象将不复存在。 你想要temp = new Node;而不是temp=&new_obj;.

编辑 此外,如果列表为非空,则while循环将保留指向列表的非 NULL 最后一个节点的temp。 因此,您实际上不会分配新节点,因为if(temp==NULL)检查将失败!

编辑 2 return temp;就这样很好。 要修复段错误,只需更改新节点的创建。 对于while错误,有很多方法可以修复它。 一种选择是查找有关列表的"标头节点"的信息。 另一种方法是先测试head==NULL并单独处理。