c++ - 返回指针时出现段错误

标签 c++ pointers struct segmentation-fault

<分区>

所以这是将新元素插入链表的代码。它采用第一个节点的地址和要插入的整数数据。但是当我返回第一个节点的地址时,我遇到了段错误。我读过其他类似的问题,但 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 循环将使 temp 指向列表的非 NULL 最后一个节点.因此,您实际上不会分配新节点,因为 if(temp==NULL) 检查将失败!

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

关于c++ - 返回指针时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38359634/

相关文章:

java - 类型敏感的语言可以是无类型的吗?

c++ - 为什么这个 cpp 可以看到一个函数,而其相应的头却没有?

matlab - 如何在Matlab中简单地连接两个具有不同字段的结构?

c++ - 为什么结果输出是整数即使结果被定义为 float ?

c++ - 实时更改qt应用程序qlineedit中的文本

c++ - 在函数之间传递时指针未更新

c++ - 在函数返回值/参数和类请求的数据传输过程中是否复制了指向内存的指针?

c - 为什么这个 print 语句会改变之前的指针?

c++ - 使用输入参数初始化结构

c++ - 为什么将字符串放入结构中会导致崩溃?