Partager via


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 était nullptr et que le champ est à l’offset zéro (&p->field == nullptr implique p == nullptr). Dans ce cas, l’expression doit être simplifiée.
  • Dans d’autres cas, la valeur de l’opérateur & unaire ne peut pas être nullptr, 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.
}

Voir aussi

C6397