gpt4 book ai didi

你能帮我理解为什么链表上的以下代码给我一个段错误吗?

转载 作者:太空宇宙 更新时间:2023-11-04 01:20:31 25 4
gpt4 key购买 nike

我是编程新手,从 C 开始,我正在编写这个链表问题。我以为我做的是,

  • head 指针作为全局指针可以从任何地方访问它并在初始时将其设置为 null
  • 在插入代码中,创建相同类型的新指针并分配内存并将插入的数据赋予它。将头指针指向当前第一个插入的数据
  • 对于下一个插入,传入头部并迭代直到结束,并使最后一个节点的下一个指向当前节点并将当前节点设为空
  • 同样对于 display pass 在头部并迭代到最后并打印

我在这里遗漏了什么有人可以帮助我为什么我会收到 second input 的段错误以及如何更正它?显示功能也应该有什么变化吗?

#include<stdio.h>
#include<stdlib.h>

void insert(int data_add);
void display();
struct list
{
int data;
struct list *next;
} *head = NULL;

int main()
{
int data_add,n;
while(1)
{

printf("\n\n1.Add\n2.Display\n3.Exit\n");
scanf("%d",&n);
switch(n)
{
case 1: printf("\nEnter the element to add ");
scanf("%d",&data_add);
insert(data_add);
break;
case 2: printf("The nos are: ");
display();
break;
case 3: exit(1);
break;
default: printf("\nOpen your eyes");
}
}
}

void insert(int add)
{
struct list *current,*temp;
current = (struct list*) malloc (sizeof(struct list));
current->data = add;
if(head == NULL)
{
head = current;
current->next = NULL;
}
else
{
for(temp = head; temp!=NULL;temp = temp->next);
temp->next = current;
current->next = NULL;

}
}

void display()
{
struct list *current;
current = head;
while(current!=NULL)
{
printf("%d",current->data);
current = current->next;
}
}

最佳答案

想想这段代码:

  for(temp = head; temp!=NULL;temp = temp->next);
temp->next = current;

那么,你结束循环的条件是temp != NULL 那么,循环运行后的temp是什么? NULL,当然!

您的停止条件需要是 temp->next != NULL

旁注:是时候学习使用调试器了。有了足够的经验,您只需查看代码就能发现此类问题,但也有更复杂的失败方式;) 使用调试器,您会立即发现该问题。

关于你能帮我理解为什么链表上的以下代码给我一个段错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44553095/

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