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 eranullptr
e o campo está no deslocamento zero (&p->field == nullptr
implicap == nullptr
). Nesse caso, a expressão deve ser simplificada. - Em quaisquer outros casos, o valor do operador unário
&
não pode sernullptr
, 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.
}