如何解决分段默认值
创建节点:
struct Node
{
int data;
struct Node *link;
};
struct Node *head = NULL;
附加函数
int append()
{
struct Node *temp;
struct Node *p;
temp = (struct Node *)malloc(sizeof(struct Node));
printf("Enter the data");
scanf("%d",&temp->data);
if (head == NULL)
{ temp->link = NULL;
head = temp;
}
else
{
p = head;
while (p != NULL)
{
p = p->link;
}
p->link=NULL;
}
return p->data;
}
主要功能
void main()
{
int append();
int insert();
int insert_begin();
int display();
int delete ();
int del_between();
int k = 1,ch,d;
while (k)
{
printf("\nEnter choice\n");
printf("1.Append\n");
printf("2.In between\n");
printf("3.At the beginning\n");
printf("4.display\n");
printf("5.Delete\n");
printf("6.Delete from between\n");
printf("7.Quit\n");
scanf("%d",&ch);
switch (ch)
{
case 1:
d = append();
printf("pushed %d",d);
break;
case 2:
insert();
break;
case 3:
insert_begin();
break;
case 4:
display();
break;
case 5:
delete ();
break;
case 6:
del_between();
break;
case 7:
k = 0;
break;
default:
printf("wrong choice");
}
}
}
我一直试图在链表的末尾附加一个节点,但是一旦我输入要添加的数据,就会出现分段默认错误。
输出画面
Enter choice
1.Append
2.In between
3.At the beginning
4.display
5.Delete
6.Delete from between
7.Quit
1
Enter the data23
Segmentation fault
..................................... ………………………………………………………………………………………………………………………………………………………… ........
Segmentation fault 是什么意思?如何去除?我哪里错了? ………………………………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………………………… ……
谢谢。
解决方法
当您尝试访问某些受限制的内存时会发生分段错误。
出现错误是因为在您的情况下链表为空并且第一次当您调用append时strong> 函数,它进入您的 if 语句,并在您的 if head = temp;
中,因此您正在使用临时数据更新您的头脑。此外,当 if 条件结束时,您将返回 p return p->data;
的值,但这不起作用。
因为 p 仅初始化但没有数据值,因此访问未分配给 SIGSEGV 的内容。
您可以通过编辑来解决错误:
if (head == NULL)
{ temp->link = NULL;
head = temp;
return head->data;
}
else
{
p = head;
while (p != NULL)
{
p = p->link;
}
p->link=temp;
p=temp;
temp->link=NULL;
}
return p->data;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。