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.
}
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Prochainement : Tout au long de l'année 2024, nous supprimerons progressivement les GitHub Issues en tant que mécanisme de retour d'information pour le contenu et nous les remplacerons par un nouveau système de retour d'information. Pour plus d’informations, voir:Soumettre et afficher des commentaires pour