Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Using uninitialized memory 'variable'.
Remarks
This warning is reported when an uninitialized local variable is used before it's assigned a value. This usage could lead to unpredictable results. You should always initialize variables before use.
Code analysis name: USING_UNINIT_VAR
Example
The following code generates this warning because variable i
is only initialized if b
is true:
int f( bool b )
{
int i;
if ( b )
{
i = 0;
}
return i; // i is uninitialized if b is false
}
To correct this warning, initialize the variable as shown in the following code:
int f( bool b )
{
int i = -1;
if ( b )
{
i = 0;
}
return i;
}
Heuristics
The following example shows that passing a variable to a function by reference causes the compiler to assume that it's initialized:
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()
}
This supports the pattern of passing a pointer to a variable into an initialization function.
This heuristic can lead to false negatives because many functions expect pointers that point to initialized data. Use SAL annotations, such as _In_
and _Out_
, to describe the function's behavior. The following example calls a function that expects its argument to be initialized, so a warning is generated:
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;
}