2013-09-28 33 views
1

我在與下面的代碼拋出的警告問題,希望你能幫助我:警告:數組下標是以上數組界限[-Warray界]

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

DICE_NUMBER被定義我的頭文件爲0.

顯然,0不會超過數組的大小。

該數組被定義爲。

int    mana[2]; 

我完全不知道爲什麼會這樣做,因爲0顯然在數組的範圍內。我的一半引擎代碼現在拋出這些數組綁定的錯誤,我已經得到了大約30個,而NONE對我來說是有意義的。

下面是使輸出:

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'oh。問題是fprintf上的第三個整數輸出是DICE_BONUS,但在另一行上,我認爲編譯器警告我關於DICE_NUMBER,它警告我關於BONUS。

+6

[SSCCE](http://sscce.org),或者它沒有發生。 – jrok

+0

你確定警告是因爲顯示的代碼? –

+0

更新到您自己的問題plz,而不是評論。 – billz

回答

3

mana[2]是兩個元素的整數數組,而DICE_BONUS被定義爲2因此mana[2]意味着您正試圖訪問第三個元素。

記憶陣列從0下標開始。因此所有與DICE_BONUS有關的警告都是有效的。您需要重新定義三個元素的數組。

現在約DICE_NUMBER這是不會導致警告。也許你在這條線上還有一些額外的論據,其中也包括DICE_BONUS

+0

事實上,考慮到他的格式字符串需要三個整數來顯示像'4d6 + 1'這樣的東西,所以'printf'函數調用的其餘部分似乎可能包含'pMobIndex- >法力[DICE_BONUS]'繼續。 – SirGuy