Bagikan melalui


Peringatan C6001

Menggunakan 'variabel' memori yang tidak diinisialisasi.

Keterangan

Peringatan ini dilaporkan ketika variabel lokal yang tidak diinisialisasi digunakan sebelum ditetapkan nilai. Penggunaan ini dapat menyebabkan hasil yang tidak dapat diprediksi. Anda harus selalu menginisialisasi variabel sebelum digunakan.

Nama analisis kode: USING_UNINIT_VAR

Contoh

Kode berikut menghasilkan peringatan ini karena variabel i hanya diinisialisasi jika b benar:

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

Untuk memperbaiki peringatan ini, inisialisasi variabel seperti yang ditunjukkan dalam kode berikut:

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

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

Heuristik

Contoh berikut menunjukkan bahwa meneruskan variabel ke fungsi berdasarkan referensi menyebabkan pengkompilasi mengasumsikan bahwa variabel tersebut diinisialisasi:

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

Ini mendukung pola meneruskan pointer ke variabel ke dalam fungsi inisialisasi.

Heuristik ini dapat menyebabkan negatif palsu karena banyak fungsi mengharapkan pointer yang menunjuk ke data yang diinisialisasi. Gunakan anotasi SAL, seperti _In_ dan _Out_, untuk menjelaskan perilaku fungsi. Contoh berikut memanggil fungsi yang mengharapkan argumennya diinisialisasi, sehingga peringatan dihasilkan:

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

Lihat juga

Compiler Warning (level 1 dan level 4) C4700