减去Linked List元素时的分段错误

时间:2013-02-17 18:03:59

标签: c linked-list

我试图减去两个连续的节点并将结果放在它们之前的新节点中。 但我得到分段错误,然后程序停止响应。

此处LinkList是一个结构。

void subtract_node(LinkList **p)
{
    LinkList *q,*temp=NULL,*r;
    int i=0;
    q=r=*p;
    temp=(LinkList*)malloc(sizeof(LinkList));
    while(q!=NULL)
    {
        temp->item=q->next->item-q->item;
        temp->next=q;
        if(i==0)
        {
            *p=r=temp;
            r=r->next->next;
            q=q->next->next;
        }
        else
        {
            r->next=temp;
            temp=r;
            r=r->next->next;
            q=q->next->next;
        }
        printf("%d",i++);
    }
}

1 个答案:

答案 0 :(得分:1)

您不能取消引用链接列表中的next指针,而不先对其内容进行空值检查。具体来说,这个表达

q->next->item - q->item
q->nextNULL时,

将失败。您确实在循环标题中检查了q NULL,但您还需要检查q->next以避免崩溃:

while((q!=NULL) && (q->next != NULL)) {
    ...
}