Uyarı C6001
Başlatılmamış 'variable' belleğini kullanma.
Açıklamalar
Bir değer atanmadan önce başlatılmamış bir yerel değişken kullanıldığında bu uyarı bildirilir. Bu kullanım öngörülemeyen sonuçlara yol açabilir. Kullanmadan önce değişkenleri her zaman başlatmanız gerekir.
Kod analizi adı: USING_UNINIT_VAR
Örnek
Değişken i
yalnızca true olduğunda b
başlatıldığından aşağıdaki kod bu uyarıyı oluşturur:
int f( bool b )
{
int i;
if ( b )
{
i = 0;
}
return i; // i is uninitialized if b is false
}
Bu uyarıyı düzeltmek için aşağıdaki kodda gösterildiği gibi değişkeni başlatın:
int f( bool b )
{
int i = -1;
if ( b )
{
i = 0;
}
return i;
}
Buluşsal yöntemler
Aşağıdaki örnekte, bir değişkenin bir işleve başvuruyla geçirilmesinin derleyicinin başlatıldığını varsaymaya neden olduğu gösterilmektedir:
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()
}
Bu, bir işaretçiyi bir değişkene başlatma işlevine geçirme düzenini destekler.
Birçok işlev, başlatılan verileri işaret eden işaretçiler beklediği için bu buluşsal durum hatalı negatiflere yol açabilir. İşlevin davranışını açıklamak için ve _Out_
gibi _In_
SAL ek açıklamalarını kullanın. Aşağıdaki örnekte bağımsız değişkeninin başlatılmasını bekleyen bir işlev çağrılır, bu nedenle bir uyarı oluşturulur:
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;
}