警告:数组下标高于数组边界 [-Warray-bounds]

Posted

技术标签:

【中文标题】警告:数组下标高于数组边界 [-Warray-bounds]【英文标题】:warning: array subscript is above array bounds [-Warray-bounds] 【发布时间】:2013-09-28 10:46:54 【问题描述】:

我遇到以下代码抛出警告的问题,希望您能帮助我:

   fprintf (fp, "%dd%d+%d ", pMobIndex->mana[DICE_NUMBER],

DICE_NUMBER 在我的头文件中定义为 0。

显然,0 不超过数组的大小。

数组定义为。

   int               mana[2];

我完全不知道为什么会这样做,因为 0 显然在数组的范围内。我的一半引擎代码现在抛出这些数组绑定错误,我有大约 30 个,其中 NONE 对我来说是有意义的。

这是 make 的输出:

  gcc -O3 -s -Wall -c -o obj/olc_save.o olc_save.c
olc_save.c: In function 'save_mobile':
olc_save.c:234:13: warning: array subscript is above array bounds [-Warray-bounds]
     fprintf (fp, "%dd%d+%d ", pMobIndex->mana[DICE_NUMBER],
         ^

它也会发生:

db1.c: In function 'create_mobile':
db1.c:2056:30: warning: array subscript is above array bounds [-Warray-bounds]
             + pMobIndex->mana[DICE_BONUS];

olc_act.c: In function 'medit_manadice':
olc_act.c:6500:15: warning: array subscript is above array bounds [-Warray-bounds]
     pMob->mana[DICE_BONUS] = atoi (bonus);

我的头文件中的定义:

/* dice */
#define DICE_NUMBER  0
#define DICE_TYPE    1
#define DICE_BONUS   2

我知道DICE_BONUS 会(现在才意识到),但我这辈子无法弄清楚为什么DICE_NUMBER 会。

哦。问题是fprintf 上的第三个整数输出是DICE_BONUS 但它在另一行,我认为编译器警告我关于DICE_NUMBER,它警告我关于奖金。

【问题讨论】:

SSCCE 请,否则不会发生。 你确定警告是因为显示的代码吗??? 请更新到您自己的问题,而不是作为评论。 DICE_BONUS 在您的情况下显然超出范围 【参考方案1】:

mana[2] 是一个包含两个元素的整数数组,DICE_BONUS 定义为 2,所以mana[2] 表示您正在尝试访问第三个元素。

记住数组从0 下标开始。所以所有与DICE_BONUS 相关的警告都是有效的。您需要为三个元素重新定义数组。

现在关于DICE_NUMBER 不会引起警告。也许你在该行还有一些额外的论点,其中也包括DICE_BONUS

【讨论】:

事实上,考虑到他的格式字符串需要三个整数来显示像4d6 + 1 这样的东西,printf 函数调用的其余部分似乎还包括pMobIndex->mana[DICE_BONUS]

以上是关于警告:数组下标高于数组边界 [-Warray-bounds]的主要内容,如果未能解决你的问题,请参考以下文章

错误:数组下标高于 std::vector::insert 的数组边界

指针与数组

keil5数组下标异常

指针和数组分析(下)

数组中的二分法查找

返回一个二维整数数组中最大子数组的和