Share via


Advertencia C6001

Uso de la memoria "variable" sin inicializar.

Comentarios

Esta advertencia se notifica cuando se usa una variable local sin inicializar antes de asignar un valor. Este uso podría dar lugar a resultados imprevisibles. Siempre debe inicializar variables antes de usarlas.

Nombre del análisis de código: USING_UNINIT_VAR

Ejemplo

El código siguiente genera esta advertencia porque la variable i solo se inicializa si b es true:

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

Para corregir esta advertencia, inicialice la variable como se muestra en el código siguiente:

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

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

Heurística

En el ejemplo siguiente se muestra que pasar una variable a una función por referencia hace que el compilador suponga que se inicializa:

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

Esto admite el patrón de pasar un puntero a una variable en una función de inicialización.

Esta heurística puede provocar falsos negativos porque muchas funciones esperan punteros que apuntan a datos inicializados. Use anotaciones SAL, como _In_ y _Out_, para describir el comportamiento de la función. En el ejemplo siguiente se llama a una función que espera que se inicialice su argumento, por lo que se genera una advertencia:

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

Consulte también

Advertencia del compilador (niveles 1 y 4) C4700