分享方式:


警告 C6001

使用未初始化的記憶體 ' variable '。

備註

在指派值之前,使用未初始化的區域變數時,就會報告這個警告。 此使用方式可能會導致無法預期的結果。 您應該一律先初始化變數,再使用。

程式碼分析名稱: USING_UNINIT_VAR

範例

下列程式碼會產生此警告,因為 i 變數只有在 為 true 時 b 才會初始化:

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

若要更正此警告,請初始化 變數,如下列程式碼所示:

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

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

啟發學習法

下列範例顯示,以傳址方式將變數傳遞至函式會導致編譯器假設其已初始化:

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

這支援將指標傳遞至變數至初始化函式的模式。

這種啟發學習法可能會導致誤判,因為許多函式預期指標指向初始化的資料。 使用 SAL 批註 ,例如 _In__Out_ ,來描述函式的行為。 下列範例會呼叫預期其引數要初始化的函式,因此會產生警告:

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

另請參閱

編譯器警告 (層級 1 和層級 4) C4700