C ++中链表实现中的分段错误

时间:2013-08-18 02:49:12

标签: c++ segmentation-fault access-violation

我在C ++中编写一个函数,将“int”类型的“数据”添加到链表的末尾。

void insert_back()
{
 int no;
 node *temp;
 cout<<"\nEnter the number"<<"\n";
 cin>>no;
 temp = head;
 if(temp != NULL)
 {
         while(temp != NULL)
                    temp = temp->next;
 }

 temp->next = (node*)malloc(sizeof(node));
 temp = temp->next;
 temp->data = no;
 temp->next = NULL;

}

然而,在行,temp-&gt; next =(node *)malloc(sizeof(node)),我得到访问冲突错误(分段错误)。我没有发现任何根本错误。你能否就这个问题赐教我?

4 个答案:

答案 0 :(得分:1)

如果要获取列表的最后一个节点,只需检查 next 成员是否为null,因为最后一个节点的 next 成员为null。

在您的代码中,您检查 temp 是否为null,而不是 temp-&gt; next

while(temp != NULL)
    temp = temp->next;

将在循环结束时将temp设为null。

此外,您还应该考虑头部为空的条件。

void insert_back()
{
    int no;
    node *temp;
    cout<<"\nEnter the number"<<"\n";
    cin>>no;
    temp = head;
    if(temp != NULL)
    {
        while(temp->next != NULL)
            temp = temp->next;
        temp->next = (node*)malloc(sizeof(node));
        temp = temp->next;
        temp->data = no;
        temp->next = NULL;
    }else{
        head = (node*)malloc(sizeof(node));
        head->data = no;
        head->next = NULL;
    }

}

答案 1 :(得分:0)

在该行执行之前,temp将为空。然后你取消引用它。

答案 2 :(得分:0)

您所引用的温度不存在,温度为NULL。若要更正此问题,请使用temp-> next!= NULL代替在while循环条件下使用temp!= NULL。

 while(temp->next!=NULL)
{
   temp = temp->next;
}

Node* new_node = (Node*)malloc(sizeof(Node));

new_node->data = no;
new_node->next = NULL;
temp->next = new_node;

答案 3 :(得分:-1)

while(temp != NULL)
    temp = temp->next;

上面的代码将您带到列表中的最后一个节点。因此,您可以将节点添加到temp本身而不是temp->next

temp = (node*)malloc(sizeof(node));

现在最后一个节点的子节点应为NULL。

temp->next = NULL;