Avertissement C6001
Utilisation de la mémoire non initialisée 'variable'.
Notes
Cet avertissement est signalé lorsqu’une variable locale non initialisée est utilisée avant d’attribuer une valeur. Cette utilisation peut entraîner des résultats imprévisibles. Vous devez toujours initialiser des variables avant l’utilisation.
Nom de l’analyse du code : USING_UNINIT_VAR
Exemple
Le code suivant génère cet avertissement, car la variable i
est initialisée uniquement si b
elle a la valeur true :
int f( bool b )
{
int i;
if ( b )
{
i = 0;
}
return i; // i is uninitialized if b is false
}
Pour corriger cet avertissement, initialisez la variable comme indiqué dans le code suivant :
int f( bool b )
{
int i = -1;
if ( b )
{
i = 0;
}
return i;
}
Heuristique
L’exemple suivant montre que le passage d’une variable à une fonction par référence entraîne l’initialisation du compilateur :
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()
}
Cela prend en charge le modèle de passage d’un pointeur à une variable dans une fonction d’initialisation.
Cette heuristique peut entraîner des faux négatifs, car de nombreuses fonctions attendent des pointeurs qui pointent vers des données initialisées. Utilisez des annotations SAL, telles que _In_
et _Out_
, pour décrire le comportement de la fonction. L’exemple suivant appelle une fonction qui s’attend à ce que son argument soit initialisé. Par conséquent, un avertissement est généré :
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;
}