경고 C26822
null 포인터 'variable'(lifetime.1) 역참조
설명
C 및 C++에서는 null 포인터를 역참조하는 것이 자주 발생합니다. 우리는 이러한 문제를 처리하기 위해 몇 가지 검사가 있습니다. 비교는 이 블로그 게시물을 참조하세요. 분석 엔진은 포인터 값을 null로 추론하고 포인터가 역참조되는 것을 확인하면 경고를 내보낸 C26822
다. 더 엄격한 분석을 위해 C26823을 사용하도록 설정할 수도 있습니다. 또한 이 검사는 SAL 주석을 gsl::not_null
지원하고 코드의 고정을 설명합니다.
예시
void f(int *p) {
if (p == nullptr)
*p = 42; // warning: C26822
}
void assign_to_gsl_notnull() {
int* p = nullptr;
auto q = gsl::make_not_null(p); // C26822 warning
}
이 경고를 해결하려면 잠재적으로 null 검사를 추가하여 코드에 null 포인터 역참조가 없는지 확인합니다. 코드가 올바른 것으로 확인되면 종종 SAL 주석을 사용하여 gsl::not_null
가양성 결과를 수정할 수 있습니다. 아래에 이러한 주석 중 일부를 사용하는 방법에 대한 몇 가지 예가 있습니다.
_Notnull_ int *get_my_ptr();
gsl::not_null<int *> get_my_ptr2();
void local_analysis(int *p) {
_Analysis_assume_(p != nullptr);
*p = 42;
}
void local_analysis2(_In_ int *p) {
int a = *p;
}