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

C语言编译报错Array index is past the end of array问题求助

问题原因分析
  • 直接报错原因:C语言数组索引从0开始计数,你定义的groupsToTrace数组长度为LENGTH_OF_A_MACRO也就是3,合法索引范围只有0、1、2,你直接用LENGTH_OF_A_MACRO(值为3)作为索引访问groupsToTrace[3],本身就属于越界操作,因此编译器直接抛出索引越界错误。
  • 隐藏越界风险:你当前的trace判断逻辑如果后续调整为位判断(符合你提到的位映射需求),可能同时命中多个判断分支,number会持续自增,超过2之后访问ToTrace[number]也会触发越界。
  • 逻辑适配问题:你当前写的是trace等值判断逻辑,和你说的「位映射判断跟踪分组」的需求不匹配,比如trace等于3(二进制011)的场景下,现有逻辑不会命中任何分支,也无法正常赋值。
修复建议
  1. 修复数组索引越界问题,不要直接用数组长度作为索引取值。如果你需要把ToTrace中有效的元素批量拷贝到groupsToTrace,参考实现:
// 拷贝前注意限制最大拷贝长度不超过数组容量
int copyCnt = number < LENGTH_OF_A_MACRO ? number : LENGTH_OF_A_MACRO;
for(int i=0; i<copyCnt; i++) {
    blah.groupsToTrace[i] = ToTrace[i];
}
  1. 调整trace判断逻辑为位判断,匹配位映射需求,同时增加边界判断避免ToTrace越界:
if (trace & 0x1) // 匹配二进制最低位b'001
{
    if(number < LENGTH_OF_A_MACRO) {
        ToTrace[number] = noOfGroups / 8;
        number++;
    }
}
if (trace & 0x2) // 匹配中间位b'010
{
    if(number < LENGTH_OF_A_MACRO) {
        ToTrace[number] = noOfGroups / 4;
        number++;
    }
}
if (trace & 0x4) // 匹配最高位b'100
{
    if(number < LENGTH_OF_A_MACRO) {
        ToTrace[number] = noOfGroups / 2;
        number++;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 21:33:04