【问题标题】:array subscript is above array bounds [-Warray-bounds]数组下标高于数组边界 [-Warray-bounds]
【发布时间】:2013-01-17 19:00:19
【问题描述】:

我环顾四周,没有找到任何可以帮助我的东西......我正在构建一个内核并且得到了一些,数组下标高于数组边界,警告构建失败。我正在使用 Linaro 工具链并设置为 -O3,因此任何警告都会使构建失败...感谢所有帮助

    drivers/media/video/msm/rawchip/Yushan_API.c: In function 'Yushan_Check_Pad_For_IntrID':
drivers/media/video/msm/rawchip/Yushan_API.c:1751:85: warning: array subscript is above array bounds [-Warray-bounds]
error, forbidden warning: Yushan_API.c:1751

这里是失败的方法...

bool_t  Yushan_Check_Pad_For_IntrID(uint8_t bInterruptId)
{

    uint8_t     bFirstIndexForSet[] = {1, 5, 11, 17, 23, 27, 58, 62, 69, 77, 79, 82, 83};
    uint8_t     bIntrSetID = 0;
    uint16_t    uwIntrSetsDivertedToPad1 = 0;

    VERBOSELOG("[CAM] %s: Start\n", __func__);
    /* Read the list of the interrupt sets diverted to Pad1 */
    SPI_Read(YUSHAN_IOR_NVM_SEND_ITR_PAD1 , 2, (uint8_t *)&uwIntrSetsDivertedToPad1);

    /* Trace through InterruptSets */
    while(bIntrSetID < TOTAL_INTERRUPT_SETS)
    {

        if( (bInterruptId>=bFirstIndexForSet[bIntrSetID])&&(bInterruptId<bFirstIndexForSet[bIntrSetID+1]) )
        {
            if((uwIntrSetsDivertedToPad1>>bIntrSetID)&0x01) {
                VERBOSELOG("[CAM] %s: End\n", __func__);
                return INTERRUPT_PAD_1;
            } else {
                VERBOSELOG("[CAM] %s: End\n", __func__);
                return INTERRUPT_PAD_0;
            }
        } else
            bIntrSetID++;

    }

    /* Just to remove warning */
    VERBOSELOG("[CAM] %s: End\n", __func__);
    return INTERRUPT_PAD_0;

}

在线出错:

if( (bInterruptId>=bFirstIndexForSet[bIntrSetID])&&(bInterruptId < bFirstIndexForSet[bIntrSetID+1]) )

【问题讨论】:

标签: gcc


【解决方案1】:

在此调用中索引超出了数组的大小:

bFirstIndexForSet[bIntrSetID+1]

bFirstIndexForSet 有 13 个元素,需要从 0 到 12 的索引。

您正在循环查找低于TOTAL_INTERRUPT_SETS 的每个索引,这应该超过 12。 (因为 11+1 将是您的数组可以使用的最大索引。)

答案:验证 TOTAL_INTERRUPT_SETS 是否小于或等于 12。

【讨论】:

  • @user1952119:好吧,给我 15 个小时的时间检查你的 3000 行,稍后我会赶上你的!
  • 我能给你的最佳答案:如果那个人不是你,请联系 Rajdeep Patel。
  • 所以如果它没有在该文件中声明,我需要找到它的位置并确保它设置为低于或等于 12?
  • 找到了...#define TOTAL_INTERRUPT_SETS 14
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
  • 1970-01-01
  • 1970-01-01
  • 2021-08-07
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多