Udostępnij za pośrednictwem


Ostrzeżenie C6397

Operator address-of nie może zwrócić null wskaźnika w dobrze zdefiniowanym kodzie

Uwagi

Operator address-of zwraca adres operandu. Ta wartość nigdy nie powinna być porównywana z wartością nullptr:

  • Adres pola może być nullptr tylko wtedy, gdy wskaźnik podstawowy był nullptr , a pole ma zero przesunięcia (&p->field == nullptr implikuje p == nullptr). W takim przypadku wyrażenie powinno zostać uproszczone.
  • W innych przypadkach wartość operatora jednoargumentowego & nie może być nullptr , chyba że w kodzie występuje niezdefiniowane zachowanie (&v == nullptr zawsze daje wartość false).

Przykład

bool isNull(int *a)
{  
    return &a == nullptr; // C6397 reported here.
}

Aby rozwiązać ten problem, sprawdź dokładnie, czy użycie jednoargumentowego & było zamierzone:

bool isNull(int *a)
{  
    return a == nullptr; // no C6397 reported here.
}

Zobacz też

C6398