Sdílet prostřednictvím


Upozornění C6001

Použití neinicializované paměti proměnná

Poznámky

Toto upozornění se zobrazí, když se před přiřazením hodnoty použije neinicializovaná místní proměnná. Toto využití může vést k nepředvídatelným výsledkům. Před použitím byste měli proměnné vždy inicializovat.

Název analýzy kódu: USING_UNINIT_VAR

Příklad

Následující kód vygeneruje toto upozornění, protože proměnná i se inicializuje pouze v případě, že b je true:

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

Chcete-li toto upozornění opravit, inicializujte proměnnou, jak je znázorněno v následujícím kódu:

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

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

Heuristika

Následující příklad ukazuje, že předání proměnné funkci odkazem způsobí, že kompilátor předpokládá, že je inicializován:

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

To podporuje vzor předání ukazatele na proměnnou do inicializační funkce.

Tato heuristika může vést k falešně negativním výsledkům, protože mnoho funkcí očekává ukazatele, které odkazují na inicializovaná data. K popisu chování funkce použijte poznámky SAL, například _In_ a _Out_. Následující příklad volá funkci, která očekává inicializaci argumentu, takže se vygeneruje upozornění:

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

Viz také

Upozornění kompilátoru (úrovně 1 a 4) C4700