Avertissement C6397
L’opérateur d’adresse ne peut pas retourner
null
le pointeur dans du code bien défini
Notes
L'opérateur d'adresse retourne l'adresse de son opérande. Cette valeur ne doit jamais être comparée à nullptr
:
- L’adresse d’un champ ne peut être
nullptr
que si le pointeur de base étaitnullptr
et que le champ est à l’offset zéro (&p->field == nullptr
impliquep == nullptr
). Dans ce cas, l’expression doit être simplifiée. - Dans d’autres cas, la valeur de l’opérateur
&
unaire ne peut pas êtrenullptr
, sauf s’il existe un comportement non défini dans le code (&v == nullptr
prend toujours la valeur false).
Exemple
bool isNull(int *a)
{
return &a == nullptr; // C6397 reported here.
}
Pour résoudre ce problème, vérifiez deux fois si l’utilisation d’unaire &
était intentionnelle :
bool isNull(int *a)
{
return a == nullptr; // no C6397 reported here.
}