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