Uyarı C6001

Başlatılmamış 'değişken' 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 değişkeni aşağıdaki kodda gösterildiği gibi başlatın:

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

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

Sezgisel

Aşağıdaki örnekte, başvuruya göre bir değişkeni bir işleve geçirmenin 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 desenini destekler.

Birçok işlev, başlatılan verileri işaret eden işaretçiler beklediği için bu buluşsal özellik 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;
}

Ayrıca bkz.

Derleyici Uyarısı (düzey 1 ve düzey 4) C4700