我试图减去两个连续的节点并将结果放在它们之前的新节点中。 但我得到分段错误,然后程序停止响应。
此处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++);
}
}
答案 0 :(得分:1)
您不能取消引用链接列表中的next
指针,而不先对其内容进行空值检查。具体来说,这个表达
q->next->item - q->item
q->next
为NULL
时,将失败。您确实在循环标题中检查了q
NULL
,但您还需要检查q->next
以避免崩溃:
while((q!=NULL) && (q->next != NULL)) {
...
}