경고 C6397
주소 연산자는 잘 정의된 코드에서
null
포인터를 반환할 수 없습니다.
설명
주소 연산자는 피연산자의 주소를 반환합니다. 이 값은nullptr
과 비교해서는 안 됩니다.
- 필드의 주소는 기본 포인터가
nullptr
이고 필드가 0 오프셋에 있는 경우에만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.
}