Redaguoti

Bendrinti naudojant


Warning C6398

The address-of a field cannot be null in well-defined code

Remarks

The address-of operator returns the address of its operand. This value should never be compared to nullptr:

  • The address-of a field can only be nullptr if the base pointer was nullptr and the field is at the zero offset (&p->field == nullptr implies p == nullptr). In this case, the expression should be simplified.
  • In any other cases, the value of the unary & operator can't be nullptr unless there's undefined behavior in the code (&v == nullptr always evaluates to false).

Example

struct A { int* x; };

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

To fix this issue, double check if the use of unary & was intentional:

struct A { int* x; };

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

See also

C6397