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

C语言整数输入序列中出现Bus Error问题求助

错误原因与修复方案

Bus Error的核心原因是未初始化指针就直接访问,和输入空格无关,具体问题及修复如下:

1. 野指针未初始化

main函数中employee *e;和customer *c;都是未初始化的野指针,直接传递给函数会触发非法内存访问:

  • 修复:初始化e为NULL,c需要先分配内存并初始化队列结构:
    employee *e = NULL;
    customer *c = (customer*)malloc(sizeof(customer));
    c->front = NULL;
    c->rear = NULL;
    c->next = NULL;
    

2. new_employer函数无法修改外部链表头

原函数参数是employee *top,top = ptr;仅修改函数内部的副本,外部的e指针不会更新,导致员工链表始终为空:

  • 修复:改为传递指针的指针,修改外部头指针:
    void new_employer(employee **top, int id) {
        employee *ptr = (employee*)malloc(sizeof(employee));
        ptr->ID = id;
        ptr->freeAt = 0;
        ptr->totalTime = 0;
        ptr->next = *top;
        *top = ptr;
    }
    
    调用时改为:
    for(int i=1;i<=7;i++){
        new_employer(&e,i);
    }
    

3. 员工初始化循环条件错误

原循环for(int i=1;i>7;i++)的条件i>7永远不成立,导致没有员工被创建,后续help_customer会进入死递归:

  • 修复:将条件改为i<=7。

4. help_customer的内存泄漏与死递归

  • 原函数中ptr = (employee*)malloc(sizeof(employee));后立刻赋值为top,造成内存泄漏,直接删除该行即可。
  • 当所有员工忙碌时,top->next最终变为NULL,触发if(top==NULL)的递归,进入死循环,需添加终止条件(比如限制等待次数)或改为迭代查找。

5. 调试输出优化

终端输出中break11是因为printf没有换行,添加\n可让调试信息更清晰:

printf("break1\n");

修复后的main函数示例

int main(){
    employee *e = NULL;
    for(int i=1;i<=7;i++){
        new_employer(&e,i);
    }

    customer *c = (customer*)malloc(sizeof(customer));
    c->front = NULL;
    c->rear = NULL;
    c->next = NULL;
    
    int id;
    int start;
    int process;
    while(1){
        // 检查scanf是否成功读取,避免输入异常
        int ret = scanf("%d", &id);
        if(ret != 1 || id == -1){
            break;
        }
        printf("break1\n");
        scanf("%d", &start);
        printf("break2\n");
        scanf("%d", &process);
        printf("break3\n");
        new_customer(c,e,id,start,process);
    }

    customerStats(c);
    employeeStats(e);
    
    // 记得释放动态分配的内存,避免内存泄漏
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 01:06:40