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