У меня возникла проблема с следующим фрагментом кода, предупреждающим об этом, и надеялся, что вы мне поможете:
DICE_NUMBER определяется в моем файле заголовка как 0.
Очевидно, что 0 не превышает размер массива.
Массив определяется как.
Я совершенно не знаю, почему это будет делать это, поскольку 0 явно находится в пределах массива. Половина кода моего двигателя теперь бросает эти ошибки с привязкой к массиву, у меня их около 30, и NONE из них имеют смысл для меня.
Вот вывод из make:
это также происходит:
Определение в моем файле заголовка:
Я знаю, что DICE_BONUS будет (понимая это только сейчас), но я для жизни меня не могу понять, почему DICE_NUMBER.
D’о. Проблема в том, что третий целочисленный вывод на fprintf — DICE_BONUS, но на другой строке, я думал, что компилятор предупреждает меня о DICE_NUMBER, он предупреждал меня о BONUS.
I have a to deal with a structure of a lib :
my problem come from the pad[5] member of the structure that I don’t really understand. I thougth this member can be used as the other member in function like that:
but this function:
generate warning in gcc
error array subscript is above array bounds
Can someone explain me what this means ?

4 Answers 4
Structure field pad was defined as «array of 5 uint32_t «. You must differ variable definition from using the variable. So since pad is defined, pad[5] means «get the fifth (counting from 0) element of pad array». But there is no such element in pad array, because the highest index available for this array is 4.
Also, it seems that you want to return pointer to the first element of this array, not the fifth element. So you must rewrite your function this way:
When you crate an array with 5 members, they get indexed 0-4, if you try to acces 5, you’re out of bounds
Arrays in C are zero based.
The warning means that you are trying to access an element outside the array. An index of 5 means the sixths element and the array only has 5 elements.
У меня проблема со следующим фрагментом кода, выдающим предупреждения, и я надеялся, что вы мне поможете:
DICE_NUMBER определен в моем заголовочном файле как 0.
Очевидно, что 0 не превышает размер массива.
Массив определяется как.
Я понятия не имею, зачем это делать, так как 0 явно находится в пределах массива. Половина кода моего движка теперь выдает эти связанные с массивом ошибки, у меня их около 30, и НИКТО из них имеют смысл для меня.
Вот вывод из make:
Определение в моем заголовочном файле:
Я знаю, что 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 там тоже.