返回指针时出现分段错误

时间:2016-07-13 18:56:17

标签: c++ pointers struct segmentation-fault

所以这是用于将新元素插入链表的代码。它需要插入第一个节点的地址和整数数据。但是当我返回第一个节点的地址时,我收到了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);
    }

1 个答案:

答案 0 :(得分:3)

Node new_obj在堆栈上创建一个对象,而不是堆。当Insert退出时,该对象不再存在。您需要temp = new Node;而不是temp=&new_obj;

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

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