Advertencia C6398
La dirección de un campo no puede ser
null
en código bien definido
Comentarios
El operador address-of devuelve la dirección de su operando. Este valor nunca debe compararse con nullptr
:
- La dirección de un campo solo puede ser
nullptr
si el puntero base esnullptr
y el campo está en el desplazamiento cero (&p->field == nullptr
implicap == nullptr
). En este caso, la expresión debe simplificarse. - En cualquier otro caso, el valor del operador unario
&
no puede sernullptr
a menos que haya un comportamiento indefinido en el código (&v == nullptr
siempre se evalúa como false).
Ejemplo
struct A { int* x; };
bool hasNullField(A *a)
{
return &a->x == nullptr; // C6398 reported here.
}
Para corregir este problema, compruebe si el uso del unario &
era intencional:
struct A { int* x; };
bool hasNullField(A *a)
{
return a->x == nullptr; // no C6398 reported here.
}