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

时间:2013-09-28 10:46:54

标签: c++ c arrays mud

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

   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。

D'哦。问题是fprintf上的第三个整数输出是DICE_BONUS,但它在另一行,我认为编译器警告我DICE_NUMBER,它警告我有关BONUS的信息。

1 个答案:

答案 0 :(得分:3)

mana[2]是两个元素的整数数组,DICE_BONUS定义为2,因此mana[2]表示您尝试访问第三个元素。

REMEMBER数组从0下标开始。因此,与DICE_BONUS相关的所有警告均有效。您需要为三个元素重新定义数组。

现在约DICE_NUMBER没有引起警告。也许你在那一行还有一些额外的论点,其中也包括DICE_BONUS