Udostępnij za pośrednictwem


Ostrzeżenie C6201

Indeks "index-name" jest poza prawidłowym zakresem indeksu "minimum" do "maksimum" dla ewentualnie przydzielonego buforu stosu "zmienna"

To ostrzeżenie wskazuje, że przesunięcie liczby całkowitej do określonej tablicy stosu przekracza maksymalne granice tej tablicy. Może to spowodować błędy przepełnienia stosu, niezdefiniowane zachowanie lub awarie.

Uwagi

Jedną z typowych przyczyn tej wady jest użycie rozmiaru tablicy jako indeksu do tablicy. Ponieważ indeksowanie tablic w języku C/C++ jest oparte na zera, maksymalny indeks prawny tablicy jest mniejszy niż liczba elementów tablicy.

Nazwa analizy kodu: INDEX_EXCEEDS_MAX

Przykład

Poniższy kod generuje ostrzeżenie C6201. Warunek for pętli przekracza prawidłowy zakres indeksu, buff gdy ustawia i wartość 14, czyli jeden element obok końca:

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
    }
}

Aby poprawić ostrzeżenie, upewnij się, że indeks pozostaje w granicach. Poniższy kod przedstawia poprawiony warunek pętli:

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
    }
}

Algorytmy heurystyczne

Ta analiza jest ograniczona do tablic przydzielonych do stosu. Nie uwzględnia na przykład tablic przekazanych do funkcji z adnotacjami języka adnotacji kodu źródłowego firmy Microsoft (SAL) — długość adnotacji.

Ta analiza nie może przechwycić wszystkich możliwych z indeksów granic, ponieważ nie wszystkie arytmetyczne można dokładnie przeanalizować. Jest to dostosowane do przypadków raportowania, w których może zagwarantować, że indeks poza granicami jest możliwy. Brak ostrzeżenia nie oznacza, że indeks musi znajdować się w granicach.