Warnung C6398
Die Adresse eines Felds darf in klar definiertem Code nicht
null
sein.
Der address-of-Operator gibt die Adresse seines Operanden zurück. Dieser Wert sollte niemals mit nullptr
verglichen werden:
- Die Adresse eines Felds kann nur
nullptr
sein, wenn der Basiszeigernullptr
war und das Feld sich am Nulloffset befindet (&p->field == nullptr
impliziertp == nullptr
). In diesem Fall sollte der Ausdruck vereinfacht werden. - In anderen Fällen kann der Wert des unären
&
-Operators nichtnullptr
sein, es sei denn, es gibt ein nicht definiertes Verhalten im Code (&v == nullptr
wird immer als „false“ ausgewertet).
struct A { int* x; };
bool hasNullField(A *a)
{
return &a->x == nullptr; // C6398 reported here.
}
Um dieses Problem zu beheben, überprüfen Sie noch einmal, ob die Verwendung des unären &
-Operators beabsichtigt war:
struct A { int* x; };
bool hasNullField(A *a)
{
return a->x == nullptr; // no C6398 reported here.
}