Share via


Warnung C6001

Verwenden des nicht initialisierten Arbeitsspeichers "Variable".

Hinweise

Diese Warnung wird gemeldet, wenn eine nicht initialisierte lokale Variable verwendet wird, bevor ein Wert zugewiesen wird. Diese Verwendung kann zu unvorhersehbaren Ergebnissen führen. Sie sollten Variablen immer vor der Verwendung initialisieren.

Codeanalysename: USING_UNINIT_VAR

Beispiel

Der folgende Code generiert diese Warnung, da die Variable i nur initialisiert wird, wenn b "true" lautet:

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

Um diese Warnung zu korrigieren, initialisieren Sie die Variable wie im folgenden Code dargestellt:

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

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

Heuristik

Das folgende Beispiel zeigt, dass das Übergeben einer Variablen an eine Funktion durch Verweis bewirkt, dass der Compiler davon ausgeht, dass sie initialisiert wird:

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

Dies unterstützt das Muster der Übergabe eines Zeigers an eine Variable an eine Initialisierungsfunktion.

Diese Heuristik kann zu falsch negativen Ergebnissen führen, da viele Funktionen Zeiger erwarten, die auf initialisierte Daten verweisen. Verwenden Sie SAL-Anmerkungen, z _In_ . B. und _Out_, um das Verhalten der Funktion zu beschreiben. Im folgenden Beispiel wird eine Funktion aufgerufen, die erwartet, dass das Argument initialisiert wird, sodass eine Warnung generiert wird:

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

Siehe auch

Compilerwarnung (Ebene 1 und Ebene 4) C4700