警告 C6397
address-of 演算子は、明確に定義されたコードでは
null
ポインターを返すことができません
解説
address-of 演算子は、そのオペランドのアドレスを返します。 この値は nullptr
と決して比較しないでください。
- フィールドの address-of が
nullptr
になるのは、ベース ポインターがnullptr
で、フィールドがゼロ オフセットにある場合のみです (&p->field == nullptr
はp == nullptr
を意味します)。 この場合、式を簡略化する必要があります。 - それ以外の場合は、コード内に未定義の動作がない限り、単項
&
演算子の値をnullptr
にすることはできません (&v == nullptr
は常に false と評価されます)。
例
bool isNull(int *a)
{
return &a == nullptr; // C6397 reported here.
}
この問題を解決するには、単項 &
の使用が意図的かどうかを再確認します。
bool isNull(int *a)
{
return a == nullptr; // no C6397 reported here.
}