предупреждение: индекс массива находится выше границ массива [-Warray-bounds]

У меня проблема со следующим фрагментом кода, выдающим предупреждения, и я надеялся, что вы мне поможете:

   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.

1

Решение

mana[2] является целочисленным массивом для двух элементов и DICE_BONUS определяется как 2 так mana[2] означает, что вы пытаетесь получить доступ к третьему элементу.

REMEMBER массив начинается с 0 нижний индекс. Так что все предупреждения, связанные с DICE_BONUS является действительным. Вам нужно переопределить ваш массив для трех элементов.

Теперь о DICE_NUMBER это не вызывает предупреждение. Возможно, у вас есть дополнительный аргумент в этой строке, который включает в себя DICE_BONUS там тоже.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]