Warnung C6201
Index 'Indexname' liegt außerhalb des gültigen Indexbereichs 'minimum' bis 'maximum' für den möglicherweise vom Stapel zugewiesenen Puffer 'Variable'
Diese Warnung gibt an, dass ein ganzzahliger Offset in das angegebene Stapelarray die maximalen Grenzen dieses Arrays überschreitet. Es kann zu Stapelüberlauffehlern, nicht definierten Verhaltensweisen oder Abstürze führen.
Hinweise
Eine häufige Ursache für diesen Fehler ist die Verwendung der Größe eines Arrays als Index in das Array. Da die C/C++-Arrayindizierung nullbasiert ist, ist der maximal zulässige Index in einem Array eins kleiner als die Anzahl der Arrayelemente.
Codeanalysename: INDEX_EXCEEDS_MAX
Beispiel
Der folgende Code generiert warnung C6201. Die Schleifenbedingung überschreitet den gültigen Indexbereich, buff
wenn er auf 14 festgelegt i
wird. Dabei for
handelt es sich um ein Element über das Ende:
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
}
}
Um die Warnung zu korrigieren, stellen Sie sicher, dass der Index in Grenzen bleibt. Der folgende Code zeigt die korrigierte Schleifenbedingung:
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
}
}
Heuristik
Diese Analyse ist auf gestapelte Arrays beschränkt. Es wird nicht berücksichtigt, z. B. Arrays, die mit einer Anmerkungssprache (Sal) mit Microsoft-Quellcodeanmerkungssprache (Source Code Annotation Language, SAL) annotiert wurden.
Diese Analyse kann nicht alle möglichen Indizes abfangen, da nicht alle arithmetischen Daten präzise analysiert werden können. Es ist darauf abgestimmt, Fälle zu melden, in denen ein ungebundener Index möglich ist. Das Fehlen einer Warnung bedeutet nicht, dass der Index garantiert in Grenzen ist.