2

警告をスローする次のコードに問題があり、あなたが助けてくれることを願っています:

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

DICE_NUMBER私のヘッダーファイルでは0として定義されています。

明らかに、0 は配列のサイズを超えていません。

配列は次のように定義されます。

   int               mana[2];

0 は明らかに配列の境界内にあるため、なぜこれを行うのかまったくわかりません。私のエンジン コードの半分は現在、これらの配列バインド エラーをスローしています。約 30 個ありますが、どれも意味がありません。

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

ああ。問題は、そこにある 3 番目の整数出力がfprintfDICE_BONUSの行にあることです。コンパイラが について警告していると思いましたがDICE_NUMBER、BONUS について警告していました。

4

1 に答える 1

3

mana[2]は 2 つの要素の整数配列であり、2DICE_BONUSとして定義されているため、mana[2]3 番目の要素にアクセスしようとしていることを意味します。

REMEMBER 配列は0添え字から始まります。したがって、関連するすべての警告DICE_BONUSは有効です。3 つの要素の配列を再定義する必要があります。

これについてDICE_NUMBERは、警告が発生していません。おそらく、その行にも追加の引数があり、DICE_BONUSそこにも含まれています。

于 2013-09-28T11:00:26.743 に答える