struct node *position(int key)
{
struct node *p1 = head;
while (p1->info != key && p1 != NULL)
{
p1 = p1->link;
}
if (p1 == NULL)
printf("Insertion not possible");
return p1;
}
insertafter(int item)
{
struct node *new = (struct node *)malloc(sizeof(struct node));
struct node *p2 = position(item);
int ele;
printf("Enter element to be inserted ");
scanf("%d", &ele);
if (p2 == NULL)
printf("Insertion not possible");
else
{
new->info = ele;
new->link = p2->link;
p2->link = new;
}
}
字符串
所以一切正常,除了当我做空条件检查时。它正确地插入在所需的元素之后,但如果我给予一个不在链表中的元素,它应该返回插入不可能,因为没有找到元素(空条件),而是显示分段故障。
1条答案
按热度按时间gwbalxhn1#
分段错误是由于位置函数的while循环中的条件顺序造成的。您首先检查
p1->info != key
,然后检查p1 != NULL
。如果p1
是NULL
,则尝试访问p1->info
将导致分段错误。要解决此问题,您应该在尝试访问其成员之前首先检查p1
是否是NULL
。字符串