C und gcc-Fehler-array subscript is above array bounds
Ich habe einen deal mit der Struktur einer lib :
typedef struct {
uint8_t response_type;
uint8_t error_code;
uint16_t sequence;
uint32_t resource_id;
uint16_t minor_code;
uint8_t major_code;
uint8_t pad0;
uint32_t pad[5];
uint32_t full_sequence;
} a_structure;
mein problem kommt aus dem pad[5] - member der Struktur, die ich nicht wirklich verstehen.
Ich thougth dieses Mitglied kann verwendet werden, als die anderen member in der Funktion wie hier:
uint8_t get_response_type( a_structure * my_struct)
{
return my_struct->response_type;
}
aber diese Funktion:
uint32_t get_pad_5( a_structure * my_struct)
{
return my_struct->pad[5];
}
generieren Warnung des gcc
Fehler-array subscript is above array bounds
Kann jemand mir erklären, was das bedeutet ?
Thxs
Ich hatte eine ziemlich convolution code, der gcc es geschafft, herauszufinden, und warnte davor, "Fehler" array subscript is above array bounds. Also auch wenn dieser post problem war offensichtlich, finden diese (aufgrund der geschrieben-matching-Warnung) hat zur Lösung meiner komplexer Problem.
InformationsquelleAutor cedlemo | 2012-10-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Struktur-Feld
pad
wurde definiert als "array von 5uint32_t
". Sie müssen unterscheiden variable definition aus der Verwendung der variable. Also dapad
definiert ist,pad[5]
bedeutet "die fünfte (die Zählung beginnt bei 0) element vonpad
array". Aber es gibt kein solches element inpad
array, weil der höchste index für dieses array ist 4.Auch, es scheint, dass Sie wollen, um zurückzukehren Zeiger auf das erste element des Arrays, nicht das fünfte element. So müssen Sie schreiben Sie Ihre Funktion auf diese Weise:
OP umgehen will, die mit "pad[5] Mitglied". Das wird er nicht verstehen, entweder die Indizierung von Arrays (es gibt keine fünfte element in
pad
array) oder ein array/pointer-definition/Verwendung (Mitglied der Struktur istpad
, nichtpad[5]
). Und auch ich glaube, dass das zweite problem ist viel mehr Verwirrung für Neueinsteiger.Technisch
pad[5]
ist die sechste - element, wenn der index 0-basiert ist. Es gibt keine sechste element, daher der Fehler. Wenn Sie auf der Suche für das Letzte element in einem array in einer generischen Art und Weise, versuchenpad[sizeof(pad)-1]
. Es ist gelöst, zur compile-Zeit, so gibt es keine speed-Strafe, und künftige änderungen an diesem array werden nicht lähmen den zugehörigen code.InformationsquelleAutor ThomasMore
Wenn Sie Kiste ein array mit 5 Mitgliedern, Sie indiziert 0-4, wenn Sie versuchen, Zugang 5, du bist out of bounds
InformationsquelleAutor Minion91
Arrays in C sind null-basiert.
Die Warnung bedeutet, dass Sie versuchen, Zugriff auf ein element außerhalb des Arrays. Ein index von
5
bedeutet, dass die Sexten element, und das array nur 5 Elemente.InformationsquelleAutor Peter Lundgren
Ein array mit 5 Elementen hat Indizes
0
,1
,2
,3
, und4
. Der index5
ist out of bounds. Im Allgemeinen ein array von N Elementen hat gültige Indizes von0
zuN-1
inclusive.InformationsquelleAutor Armen Tsirunyan