用于从第n个位置的链表中删除节点,从而产生分段错误

时间:2015-08-01 11:37:54

标签: c linked-list

void deleteat(int pos)
{
    struct node *temp,*temp1;
    //temp=(struct node*)malloc(sizeof(struct node));
    temp1=temp=head;
    int i;
    if(pos==0)
    {
        temp=head->next;
        free(head);
        head=temp;
    }
    else
    {

        for(i=0;i<pos;i++)
        {   
            temp1=temp;
            temp=temp->next;
        }    
        temp1->next=temp->next;
        temp->next=NULL;
        free(temp);

    }
}
// Fucntion calls in the main
deleteat(4);
deleteat(1);
deleteat(6);

我在在线评判中提交了类似的代码,但是在那里被接受,而在我的linux机器上运行相同的代码会产生分段错误(核心转储)。我知道这个问题已被多次询问,但我在代码中找不到错误。

1 个答案:

答案 0 :(得分:2)

在迭代列表时,不要检查temp或temp1是否是有效指针。其中一些可能是null