Avviso C6001

Uso della memoria non inizializzata 'variable'.

Osservazioni:

Questo avviso viene segnalato quando viene usata una variabile locale non inizializzata prima che venga assegnato un valore. Questo utilizzo potrebbe causare risultati imprevedibili. È consigliabile inizializzare sempre le variabili prima dell'uso.

Nome dell'analisi del codice: USING_UNINIT_VAR

Esempio

Il codice seguente genera questo avviso perché la variabile i viene inizializzata solo se b è true:

int f( bool b )
{
   int i;
   if ( b )
   {
      i = 0;
   }
   return i; // i is uninitialized if b is false
}

Per correggere questo avviso, inizializzare la variabile come illustrato nel codice seguente:

int f( bool b )
{
   int i = -1;

   if ( b )
   {
      i = 0;
   }
   return i;
}

Euristica

L'esempio seguente mostra che il passaggio di una variabile a una funzione per riferimento fa sì che il compilatore presupporrà che sia inizializzato:

void init( int& i );

int f( bool b )
{
   int i;

   init(i);

   if ( b )
   {
      i = 0;
   }
   return i; // i is assumed to be initialized because it's passed by reference to init()
}

Questo supporta il modello di passaggio di un puntatore a una variabile in una funzione di inizializzazione.

Questa euristica può causare falsi negativi perché molte funzioni prevedono puntatori che puntano ai dati inizializzati. Usare annotazioni SAL, ad esempio _In_ e _Out_, per descrivere il comportamento della funzione. Nell'esempio seguente viene chiamata una funzione che prevede l'inizializzazione dell'argomento, in modo che venga generato un avviso:

void use( _In_ int& i );

int f( bool b )
{
   int i;

   use(i); // uninitialized variable warning because of the _In_ annotation on use()

   if ( b )
   {
      i = 0;
   }
   return i;
}

Vedi anche

Avviso del compilatore (livello 1 e livello 4) C4700