Avertissement C6201
L’index 'index-name' est hors de la plage d’index valide 'minimum' à 'maximum' pour éventuellement la mémoire tampon allouée à la pile 'variable'
Cet avertissement indique qu’un décalage entier dans le tableau de pile spécifié dépasse les limites maximales de ce tableau. Cela peut entraîner des erreurs de dépassement de capacité de pile, un comportement non défini ou des blocages.
Notes
Une cause courante de ce défaut consiste à utiliser la taille d’un tableau comme index dans le tableau. Étant donné que l’indexation de tableau C/C++ est basée sur zéro, l’index légal maximal dans un tableau est un inférieur au nombre d’éléments de tableau.
Nom de l’analyse du code : INDEX_EXCEEDS_MAX
Exemple
Le code suivant génère l’avertissement C6201. La for
condition de boucle dépasse la plage d’index valide pour buff
laquelle elle est définie i
sur 14, qui est un élément passé la fin :
void f()
{
int buff[14]; // array of 0..13 elements
for (int i = 0; i <= 14; i++) // i == 14 exceeds the bounds
{
buff[i] = 0; // initialize buffer
}
}
Pour corriger l’avertissement, assurez-vous que l’index reste dans les limites. Le code suivant montre la condition de boucle corrigée :
void f()
{
int buff[14]; // array of 0..13 elements
for (int i = 0; i < 14; i++) // i == 13 on the final iteration
{
buff[i]= 0; // initialize buffer
}
}
Heuristique
Cette analyse est limitée aux tableaux alloués par pile. Il ne prend pas en compte, par exemple, les tableaux passés dans la fonction avec une longueur annotée (SAL) du code source Microsoft.
Cette analyse ne peut pas intercepter tous les index de limites possibles, car toutes les arithmétiques ne peuvent pas être analysées avec précision. Il est paramétré pour signaler les cas où il peut garantir un index hors limites est possible. L’absence d’avertissement ne signifie pas que l’index est garanti comme étant lié.