Null 条件不显示输出

Null condition not showing output

提问人:Risher322 提问时间:10/29/2023 最后编辑:chqrlieRisher322 更新时间:10/29/2023 访问量:41

问:

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;
    }  
}

因此,除了我进行空条件检查外,其他一切都正常工作。它正确地插入到所需的元素之后,但是如果我给出一个链表中不存在的元素,它应该返回插入是不可能的,因为找不到该元素(空条件),而是显示分割错误。

c 函数 链接列表 分段错误

评论

1赞 Aconcagua 10/29/2023
顺便说一句:扫描用户输入——这个输入可能总是无效的,并可能因此失败!因此,请检查其返回值。如果这样做,请仅在扫描后创建一个新节点,这样您就不会白费力气创建一个节点(如果可能的话)。scanfscanf
0赞 Surge 10/29/2023
你能添加上下文吗?缺少一些声明,例如 等。node

答:

3赞 Akhilesh Pandey 10/29/2023 #1

分段故障是由于位置函数的 while 循环中的条件顺序造成的。您首先检查,然后检查.如果尝试访问将导致分段错误。要解决此问题,您应该在尝试访问其成员之前首先检查是否是。p1->info != keyp1 != NULLp1NULLp1->infop1NULL

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
当我在列表中输入一个不重要的元素时,就会出现分段错误。当我这样做时,它应该无法打印插入。