У меня проблема со следующим фрагментом кода, выдающим предупреждения, и я надеялся, что вы мне поможете:
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.
D’о. Проблема в том, что третий целочисленный вывод там на fprintf
DICE_BONUS, но на другой линии, я думал, что компилятор предупреждает меня о DICE_NUMBER, он предупреждает меня о BONUS.
mana[2]
является целочисленным массивом для двух элементов и DICE_BONUS
определяется как 2 так mana[2]
означает, что вы пытаетесь получить доступ к третьему элементу.
REMEMBER массив начинается с 0
нижний индекс. Так что все предупреждения, связанные с DICE_BONUS
является действительным. Вам нужно переопределить ваш массив для трех элементов.
Теперь о DICE_NUMBER
это не вызывает предупреждение. Возможно, у вас есть дополнительный аргумент в этой строке, который включает в себя DICE_BONUS
там тоже.
Других решений пока нет …