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

如何修复C语言代码中out-of-bounds write越界写入overrun错误

越界原因说明

callLightTimerAside 越界原因

C语言数组为0基索引,长度为N的数组有效索引范围是0 ~ N-1。你定义的callLightTimerAside[FLOORSNUMBER]大小为128,有效索引只能到127,但你的循环条件写的是i <= FLOORSNUMBER,当i取值为128时就会访问到数组边界外的地址,触发越界报错,和数组大小是否匹配FLOORSNUMBER无关,是循环条件写法错误导致的。

downCallSide 越界原因

该数组大小为40,有效索引范围是0 ~ 39,循环中i最高可达128,远超出数组上限,必然触发越界。


修复方案

根据你的业务逻辑可以选择两种修复方式:

  • 方案1:拆分循环分别遍历两个数组(最常用,适合需要全量初始化两个数组的场景)
    修正循环条件为小于数组长度,避免索引越界:
    // 初始化downCallSide数组
    for(i = 0; i < ILAFLOORSNUMBER; i++) {
        ilaByPass.downCallSide[i] = OFFSTATE;
    }
    
    // 初始化callLightTimer系列数组
    #ifndef NA 
    for(i = 0; i < FLOORSNUMBER; i++) {
        callLightTimerAside[i] = OFFSTATE;
        // 如需同步初始化B侧数组可以在此处加对应逻辑
    }
    #endif
    
  • 方案2:保留单循环,加范围判断(适合楼层号和索引直接绑定,仅前40层有downCallSide属性的场景)
    修正循环上限,同时对downCallSide的访问加有效范围校验:
    // 修正循环条件为小于,避免i=128的越界问题
    for(i = 0; i < FLOORSNUMBER; i++) {
        // 仅当i在downCallSide有效范围内才执行赋值
        if(i < ILAFLOORSNUMBER) {
            ilaByPass.downCallSide[i] = OFFSTATE;
        }
        #ifndef NA 
        callLightTimerAside[i] = OFFSTATE;
        #endif
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:27:05