Avertissement C6398
L’adresse d’un champ ne peut pas être
null
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
struct A { int* x; };
bool hasNullField(A *a)
{
return &a->x == nullptr; // C6398 reported here.
}
Pour résoudre ce problème, vérifiez deux fois si l’utilisation d’unaire &
était intentionnelle :
struct A { int* x; };
bool hasNullField(A *a)
{
return a->x == nullptr; // no C6398 reported here.
}