You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言实现双端队列(Deque)调用deque_from_back()后程序直接退出问题排查

问题原因及修复方案

以下是触发程序异常退出的4个核心问题及对应修复方法:

1. 主函数循环逻辑错误

当前main函数的while循环条件写为while(opr_cd != 4),且opr_cd未初始化就参与判断,只要选择操作码4(尾部出队),执行完对应逻辑后就会直接跳出循环,程序自动结束,表现为调用尾部出队功能就立即退出。
修复方案:将循环条件改为while(1)即可,操作码0的分支已经包含return 0主动退出的逻辑。

2. 尾部出队逻辑顺序错误

主函数中操作码4的当前逻辑是先访问rear->data再判断队列是否为空,若队列为空时直接访问空指针会立刻触发崩溃。
修复方案:调整顺序,先判空再访问数据:

// deque data from end
else if(opr_cd == 4){
    // 先判空再操作
    if(front == NULL){ 
        printf("\nQueue is underflow nothing to delete.");
        continue;
    }
    num = rear->data;
    deque_from_back(&front,&rear);
    printf("\n%d removed from queue",num);
}

3. deque_from_back()未处理单节点边界

当队列只有1个节点时,while(node_to_delete->next != NULL) 循环不会执行,sec_last是未初始化的野指针,后续操作sec_last->next = NULL会直接访问非法内存崩溃。同时删除最后一个节点后没有将front和rear同时置空,会留下野指针隐患。
修复后的deque_from_back()实现:

// function to delete from end
void deque_from_back(Queue **front, Queue **last){
    // 处理队列仅剩1个节点的场景
    if((*front)->next == NULL){
        free(*front);
        *front = NULL;
        *last = NULL;
        return;
    }
    Queue *sec_last = *front;
    Queue *node_to_delete = *front;
    while (node_to_delete->next != NULL){
        sec_last = node_to_delete;
        node_to_delete = node_to_delete->next;
    }
    sec_last->next = NULL;
    *last = sec_last;
    free(node_to_delete);
}

4. 头部出队函数存在野指针隐患

deque_from_front()删除最后一个节点后,仅将front置为NULL,rear仍指向已释放的内存,后续操作尾部时会触发野指针访问。
修复方案:

  1. 修改函数原型,新增rear参数:
void deque_from_front(Queue **front, Queue **rear);
  1. 调整函数实现:
//function to delete data from start
void deque_from_front(Queue **front, Queue **rear){
    Queue *tem_front = *front;
    *front = tem_front->next;
    free(tem_front);
    // 队列为空时同步置空rear
    if(*front == NULL){
        *rear = NULL;
    }
}
  1. 主函数中调用该函数的地方补充传参:将deque_from_front(&front);改为deque_from_front(&front, &rear);

内容的提问来源于stack exchange,提问作者user15375057

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:06:03