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
相关产品推荐
相关产品推荐

