Предупреждение C6398
Адрес поля не может находиться
null
в четко определенном коде.
Замечания
Адрес оператора возвращает адрес своего операнда. Это значение никогда не должно сравниваться со nullptr
следующими значениями:
- Адрес поля может быть
nullptr
только в том случае, если базовый указатель былnullptr
, и поле находится на нулевом смещение (&p->field == nullptr
подразумеваетp == nullptr
). В этом случае выражение должно быть упрощено. - В любых других случаях значение унарного
&
оператора не может бытьnullptr
, если в коде не определено не определено поведение (&v == nullptr
всегда вычисляется как false).
Пример
struct A { int* x; };
bool hasNullField(A *a)
{
return &a->x == nullptr; // C6398 reported here.
}
Чтобы устранить эту проблему, дважды проверьте, является ли использование унарного &
намеренно:
struct A { int* x; };
bool hasNullField(A *a)
{
return a->x == nullptr; // no C6398 reported here.
}