提问人:Risher322 提问时间:10/29/2023 最后编辑:chqrlieRisher322 更新时间:10/29/2023 访问量:41
Null 条件不显示输出
Null condition not showing output
问:
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;
}
}
因此,除了我进行空条件检查外,其他一切都正常工作。它正确地插入到所需的元素之后,但是如果我给出一个链表中不存在的元素,它应该返回插入是不可能的,因为找不到该元素(空条件),而是显示分割错误。
答:
3赞
Akhilesh Pandey
10/29/2023
#1
分段故障是由于位置函数的 while 循环中的条件顺序造成的。您首先检查,然后检查.如果尝试访问将导致分段错误。要解决此问题,您应该在尝试访问其成员之前首先检查是否是。p1->info != key
p1 != NULL
p1
NULL
p1->info
p1
NULL
struct node* position(int key)
{
struct node *p1 = head;
while(p1 != NULL && p1->info != key)
{
p1 = p1->link;
}
if(p1 == NULL)
printf("Insertion not possible\n");
return p1;
}
评论
0赞
Risher322
10/29/2023
当我在列表中输入一个不重要的元素时,就会出现分段错误。当我这样做时,它应该无法打印插入。
评论
scanf
scanf
node