追加列表--分段错误
我正在尝试将一个列表附加到另一个列表。如果我传递两个列表的指针并仅显示它们,那么代码可以正常工作。但是,如果我使用代码到达第一个列表的 NULL 指针,然后将其等于第二个列表的第一个,那么它会给出分段错误。请让我知道错误是什么。代码如下:
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node* next;
}*Head,*New;
void display(struct node **p)
{
struct node *curptr;
curptr=*p;
if(curptr==NULL)
printf("list is empty");
else
{
while(curptr)
{
printf("->%d",curptr->data);
curptr=curptr->next;
}
}
}
void combine(struct node **a,struct node **b)
{
//display(&(*a));
struct node *aptr;
aptr=*a;
while(aptr)
aptr=aptr->next;
aptr->next=*b;
*b=NULL;
display(&(*a));
//display(&(*a));
//display(&(*b));
}
void main()
{
Head=NULL;
New=NULL;
int choice;
while(1)
{
case 9:
{
printf("Combining two lists");
combine(&Head,&New);
break;
}
I am trying to append one list with another . If i pass a pointer-to-the-pointer of both the lists and just display them, then , the code works fine. But if i use code to reach the NULL pointer of the first list and then equate it to the first one of the second, then it gives a segmentation fault. Please let me know what the mistake is. Code is below :
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node* next;
}*Head,*New;
void display(struct node **p)
{
struct node *curptr;
curptr=*p;
if(curptr==NULL)
printf("list is empty");
else
{
while(curptr)
{
printf("->%d",curptr->data);
curptr=curptr->next;
}
}
}
void combine(struct node **a,struct node **b)
{
//display(&(*a));
struct node *aptr;
aptr=*a;
while(aptr)
aptr=aptr->next;
aptr->next=*b;
*b=NULL;
display(&(*a));
//display(&(*a));
//display(&(*b));
}
void main()
{
Head=NULL;
New=NULL;
int choice;
while(1)
{
case 9:
{
printf("Combining two lists");
combine(&Head,&New);
break;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
问题就在这里:
当你跳出
while
循环时,当你尝试执行aptr-> 时,
你会得到SEGV。aptr
接下来将是NULL
;接下来要解决此问题,当您到达最后一个节点时会跳出循环(
aptr->next
将为NULL
),而不是aptr
变为 <代码>NULL。这些线上的东西:
The problem is here:
When you break out of the
while
loopaptr
will beNULL
next when you try to doaptr->next
you get the SEGV.To fix this break out of the loop when you reach the last node(
aptr->next
will beNULL
) rather thanaptr
becomingNULL
.Something on these line:
运行直到 aptr 为 NULL,之后
会导致分段错误,因为您取消引用 NULL。
runs till aptr is NULL, after that
causes a segmentation fault since you dereference NULL.