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

C语言中整数数组引发Bus Error 10错误的排查求助

数组实现队列的Bus Error 10问题分析与修复

错误根源

  • 无限循环引发内存越界
    你的循环条件是while (i <= size),初始i = size,每次循环i--。当i减到负数后,i <= size依然成立(size为正数),循环永远不会停止。此时访问active_frames[i - 1]会直接触碰数组边界外的内存,触发Bus Error 10。
  • 逻辑错误导致数据覆盖
    即使循环能终止,i==0时刚给active_frames[0]赋值为num,紧接着就会执行active_frames[0] = active_frames[-1],直接覆盖掉新插入的值,完全不符合队列操作逻辑。

修复方案

标准队列尾部入队实现

队列的核心逻辑是尾部入队、头部出队,需要用size记录当前元素个数,确保不超过数组容量:

#define QUEUE_CAPACITY 10
int active_frames[QUEUE_CAPACITY]; // 全局或已正确分配的数组

void add_int(int num, int *size) {
    // 检查队列是否已满
    if (*size >= QUEUE_CAPACITY) {
        printf("队列已满,无法添加新元素\n");
        return;
    }
    // 尾部插入新元素
    active_frames[*size] = num;
    (*size)++;
}

头部插入逻辑(非标准队列)

如果你的需求是头部插入元素(类似栈的行为),需要先将现有元素后移,再插入新值:

#define QUEUE_CAPACITY 10
int active_frames[QUEUE_CAPACITY];

void add_int(int num, int *size) {
    if (*size >= QUEUE_CAPACITY) {
        printf("队列已满,无法添加新元素\n");
        return;
    }
    // 从后往前移动元素,腾出头部位置
    for (int i = *size; i > 0; i--) {
        active_frames[i] = active_frames[i - 1];
    }
    // 头部插入新元素
    active_frames[0] = num;
    (*size)++;
}

需补充的信息

  • active_frames数组的定义方式(全局/局部?局部数组是否存在栈溢出问题?)
  • 你期望的队列具体操作逻辑(标准FIFO还是特殊需求?)
  • 调用add_int时传入的size参数初始值和变化情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:33:24