Поделиться через


Предупреждение 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.
}

См. также

C6397