Udostępnij za pośrednictwem


Ostrzeżenie C6398

Adres pola nie może być null 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

struct A { int* x; };

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

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

struct A { int* x; };

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

Zobacz też

C6397