Aviso C6398

O endereço de um campo não pode ser null em código bem definido

Comentários

O operador address-of retorna o endereço do operando dele. Este valor nunca deve ser comparado com nullptr:

  • O address-of de um campo só pode ser nullptr se o ponteiro base era nullptr e o campo está no deslocamento zero (&p->field == nullptr implica p == nullptr). Nesse caso, a expressão deve ser simplificada.
  • Em quaisquer outros casos, o valor do operador unário & não pode ser nullptr, a menos que haja um comportamento indefinido no código (&v == nullptr sempre é avaliado como falso).

Exemplo

struct A { int* x; };

bool hasNullField(A *a)
{  
    return &a->x == nullptr; // C6398 reported here.
}

Para corrigir esse problema, verifique se o uso do unário & foi intencional:

struct A { int* x; };

bool hasNullField(A *a)
{  
    return a->x == nullptr; // no C6398 reported here.
}

Confira também

C6397