警告 C6001

使用未初始化的内存“变量”

注解

对于未初始化的局部变量,如果未为其分配值便使用该变量,则会报告此警告。 这种用法可能导致不可预测的结果。 在使用变量之前,始终应初始化变量。

代码分析名称:USING_UNINIT_VAR

示例

以下代码生成此警告,因为变量 i只在 b 为 true 时才会初始化:

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