Ostrzeżenie C6397
Operator address-of nie może zwrócić
null
wskaźnika 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
bool isNull(int *a)
{
return &a == nullptr; // C6397 reported here.
}
Aby rozwiązać ten problem, sprawdź dokładnie, czy użycie jednoargumentowego &
było zamierzone:
bool isNull(int *a)
{
return a == nullptr; // no C6397 reported here.
}