在C中实现双向链表时函数的分段错误

问题描述 投票:-2回答:1

我遇到了分段错误,但是我不知道为什么,因为指针不为null。我已经测试了我的代码,它似乎只为非空的情况给出了错误。我正在尝试删除最后一个节点并获取其值。我收到此消息:Error: Memory error occurred! Type of error: segmentation-fault

struct node {
    int item;
    struct node *prev;
    struct node *next;
};

struct dl {
    struct node *front;
    struct node *back;
};

 int dl_remove_back(struct dl *dq) {
     int temp = dq->back->item;
     struct node *tempLink = dq->back->prev;

     if (dq->front->next == NULL) {
         dq->front = NULL;
     } else {
         dq->back->prev->next = NULL; //error
     }
     deq->back = tempLink;
     return temp;
}
c doubly-linked-list
1个回答
0
投票

这是我的双链表的remove_back函数:

int dl_remove_back(struct dl * f) {

    if(f == NULL) {
        fprintf(stderr, "%s: invalid argument (NULL DL pointer)\n", __func__);
        exit(EXIT_FAILURE);
    }

    struct node * temp = f->back;
    if(temp == NULL) {
        return NULL;
    }

    int item = temp->item;
    f->back = f->back->prev;
    if(f->back == NULL) {
        f->front = NULL;
    } else {
        f->back->next = NULL;
    }
    free(temp);

    return item;
}
© www.soinside.com 2019 - 2024. All rights reserved.