Condividi tramite


C6200

avviso C6200: l'indice <nome> non è compreso nell'intervallo valido degli indici <min> - <max> per il buffer <variabile> non allocato nello stack

L'avviso indica che un offset di integer nella matrice specificata supera il limite massimo della matrice.L'errore potrebbe causare un comportamento casuale o arresti anomali del sistema.

Una causa comune di errore è l'utilizzo della dimensione di una matrice come indice nella matrice.Dal momento che l'indicizzazione delle matrici nel linguaggio C/C++ è basata su zero, l'indice massimo valido in una matrice è inferiore di un'unità rispetto al numero degli elementi della matrice.

Esempio

Il codice seguente genera questo avviso in quanto il ciclo for supera l'intervallo degli indici:

int buff[14]; // array of 0..13 elements
void f()
{
   for (int i=0; i<=14;i++) // i exceeds the index
   {
     buff[i]= 0; // warning C6200 
     // code...
   }
}

Per risolvere i problemi, utilizzare la dimensione della matrice corretta come illustrato nel codice seguente:

int buff[14]; // array of 0..13 elements
void f()
{
   for ( int i=0; i < 14; i++) // loop stops when i < 14 
   {
     buff[i]= 0; // initialize buffer
    // code...
   }
}