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.