Advertencia C6201

El índice 'index-name' está fuera del intervalo de índice válido 'minimum' a 'maximum' para posiblemente el búfer asignado a la pila 'variable'

Esta advertencia indica que un desplazamiento de enteros en la matriz de pila especificada supera los límites máximos de esa matriz. Podría provocar errores de desbordamiento de pila, comportamiento indefinido o bloqueos.

Comentarios

Una causa común de este defecto es usar el tamaño de una matriz como índice en la matriz. Dado que la indexación de matrices de C/C++ está basada en cero, el índice válido máximo en una matriz es uno menor que el número de elementos de matriz.

Nombre del análisis de código: INDEX_EXCEEDS_MAX

Ejemplo

El código siguiente genera la advertencia C6201. La for condición de bucle supera el intervalo de índice válido para buff cuando se establece i en 14, que es un elemento más allá del final:

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

Para corregir la advertencia, asegúrese de que el índice permanece en los límites. El código siguiente muestra la condición de bucle corregida:

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

Heurística

Este análisis se limita a las matrices asignadas por la pila. Por ejemplo, no tiene en cuenta las matrices que se pasan a la función con una longitud anotada del lenguaje de anotación de código fuente (SAL) de Microsoft.

Este análisis no puede detectar todos los índices de límites posibles porque no todas las aritméticas se pueden analizar con precisión. Se ajusta a los casos en los que puede garantizar que un índice fuera de los límites sea posible. La ausencia de una advertencia no significa que el índice esté en límites.