Ostrzeżenie C6398
Adres pola nie może być
null
w dobrze zdefiniowanym kodzie
Uwagi
Operator address-of zwraca adres operandu. Ta wartość nigdy nie powinna być porównywana z wartością nullptr
:
- Adres pola może być
nullptr
tylko wtedy, gdy wskaźnik podstawowy byłnullptr
, a pole ma zero przesunięcia (&p->field == nullptr
implikujep == nullptr
). W takim przypadku wyrażenie powinno zostać uproszczone. - W innych przypadkach wartość operatora jednoargumentowego
&
nie może byćnullptr
, chyba że w kodzie występuje niezdefiniowane zachowanie (&v == nullptr
zawsze daje wartość false).
Przykład
struct A { int* x; };
bool hasNullField(A *a)
{
return &a->x == nullptr; // C6398 reported here.
}
Aby rozwiązać ten problem, sprawdź dokładnie, czy użycie jednoargumentowego &
było zamierzone:
struct A { int* x; };
bool hasNullField(A *a)
{
return a->x == nullptr; // no C6398 reported here.
}