gpt4 book ai didi

C 链表段错误(核心转储)错误

转载 作者:行者123 更新时间:2023-11-30 21:13:22 25 4
gpt4 key购买 nike

我是数据结构新手,在实现双链表时遇到一些问题。获取所有输入后,编译器显示段错误(核心转储)。找不到错误。我搜索了核心转储错误以及段错误,但没有帮助。这是我的代码:

struct node
{
int data;
struct node *lptr,*rptr;
};

struct node *head;

void create(struct node *head)
{
struct node *newp,*ptr;
int num,n;

printf("Enter the no. of elements you want to enter :\n");
scanf("%d",&n);

printf("Enter the elements:\n");

while(n)
{
scanf("%d",&num);
n--;

if(head==NULL)
{
newp=(struct node *)malloc(sizeof(struct node));
newp->lptr=NULL;
newp->data=num;
newp->rptr=NULL;
head=newp;
printf("Head created\n");
ptr=head;

}

else
{
while(ptr->rptr)
{
ptr=ptr->rptr;
}

ptr->rptr=(struct node *)malloc(sizeof(struct node));
ptr->rptr->lptr=ptr;
ptr->data=num;
ptr->rptr->rptr=NULL;
ptr=ptr->rptr;
printf("node inserted\n");
}
}
}

void display(struct node *head)
{
struct node *ptr;
ptr=head;
while(ptr->rptr)
{
printf("%d\t",ptr->data );
ptr=ptr->rptr;
}
}

void main()
{
head=NULL;

create(head);
display(head);
}

最佳答案

create()函数在本地修改了head变量,因此当你调用display()时,它不会指向新创建的列表。

修改create函数以返回新的头指针。这是示例更改。您需要解决一些问题,例如您不需要向其传递 head 参数,或者仅在创建新列表时才需要返回 head 等。

struct node *create(struct node *head)
{

....

return head;
}

void main()
{
head=NULL;

head = create(head);
display(head);
}

关于C 链表段错误(核心转储)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49605854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com