Advertencia C6397
El operador address-of no puede devolver un puntero
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
bool isNull(int *a)
{
return &a == nullptr; // C6397 reported here.
}
Para corregir este problema, compruebe si el uso del unario &
era intencional:
bool isNull(int *a)
{
return a == nullptr; // no C6397 reported here.
}