Avviso C6398
L'indirizzo di un campo non può essere
null
definito in codice ben definito
Osservazioni:
L'operatore address-of restituisce l'indirizzo del relativo operando. Questo valore non deve mai essere confrontato con nullptr
:
- L'indirizzo di un campo può essere
nullptr
solo se il puntatore di base eranullptr
e il campo è in corrispondenza dell'offset zero (&p->field == nullptr
implicap == nullptr
). In questo caso, l'espressione deve essere semplificata. - In altri casi, il valore dell'operatore unario
&
non può esserenullptr
a meno che non esista un comportamento indefinito nel codice (&v == nullptr
restituisce sempre false).
Esempio
struct A { int* x; };
bool hasNullField(A *a)
{
return &a->x == nullptr; // C6398 reported here.
}
Per risolvere questo problema, verificare se l'uso di unario &
è intenzionale:
struct A { int* x; };
bool hasNullField(A *a)
{
return a->x == nullptr; // no C6398 reported here.
}