C et gcc erreur d'indice de tableau est ci-dessus les limites du tableau
J'ai une face de la structure de la 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;
mon problème viens de la pad[5] membre de la structure que je ne comprends pas vraiment.
Je croyais que ce membre peut être utilisé comme les autres membres en fonction comme ça:
uint8_t get_response_type( a_structure * my_struct)
{
return my_struct->response_type;
}
mais cette fonction:
uint32_t get_pad_5( a_structure * my_struct)
{
return my_struct->pad[5];
}
générer d'alerte dans gcc
erreur d'indice de tableau est ci-dessus les limites du tableau
Quelqu'un peut-il m'expliquer ce que cela signifie ?
Thxs
- J'ai eu une assez code de convolution que gcc réussi à comprendre et a mis en garde "erreur d'indice de tableau est ci-dessus les limites du tableau. Donc, même si ce post, le problème est évident, de trouver ceci (en raison de la posté correspondant avertissement) a aider à résoudre mon problème plus complexe.
Vous devez vous connecter pour publier un commentaire.
Champ de Structure
pad
a été définie comme "tableau de 5uint32_t
". Vous devez différer définition de la variable à partir de l'utilisation de la variable. Donc, depuispad
est défini,pad[5]
signifie "obtenir le cinquième (en comptant à partir de 0) de l'élément depad
tableau". Mais il n'y a aucun élément danspad
tableau, parce que l'indice le plus élevé disponible pour ce tableau est 4.Aussi, il semble que vous souhaitez retourner un pointeur vers le premier élément de ce tableau, pas le cinquième élément. Donc, vous devez réécrire votre fonction de cette manière:
pad
array) ou un tableau/pointeur de la définition de/en utilisant (membre de la structure estpad
, paspad[5]
). Et aussi, je pense que le deuxième problème est beaucoup plus de confusion pour un débutant.pad[5]
est le sixième de l'élément si l'index est basé sur 0. Il n'y a pas de sixième élément, d'où l'erreur. Si vous êtes à la recherche pour le dernier élément dans un tableau d'une manière générique, essayezpad[sizeof(pad)-1]
. Il est résolu au moment de la compilation, donc il n'y a pas de pénalité sur la vitesse, et de toute modification ultérieure de la matrice de ne pas paralyser le code associé.Lorsque vous caisse un tableau avec 5 membres, qu'ils sont indexés de 0 à 4, si vous essayez d'accéder à l'5, vous êtes hors des limites
Tableaux en C sont en partant de zéro.
L'avertissement signifie que vous essayez d'accéder à un élément en dehors du tableau. Un indice de
5
signifie que les sixièmes élément de la matrice a seulement 5 éléments.Un tableau de 5 éléments a des indices
0
,1
,2
,3
, et4
. L'indice5
est hors limites. En général, un tableau de N éléments est valable indices de0
àN-1
inclusive.