C语言 故障条件不显示输出

kokeuurv  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(120)
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;
    }  
}

字符串
所以一切正常,除了当我做空条件检查时。它正确地插入在所需的元素之后,但如果我给予一个不在链表中的元素,它应该返回插入不可能,因为没有找到元素(空条件),而是显示分段故障。

gwbalxhn

gwbalxhn1#

分段错误是由于位置函数的while循环中的条件顺序造成的。您首先检查p1->info != key,然后检查p1 != NULL。如果p1NULL,则尝试访问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;
}

字符串

相关问题