경고 C26823
Null 포인터 'variable'(lifetime.1)를 역참조합니다.
설명
C 및 C++에서는 null 포인터를 역참조하는 것이 자주 발생합니다. 우리는 이러한 문제를 처리하기 위해 몇 가지 검사 있습니다. 비교는 이 블로그 게시물을 참조하세요. 분석 엔진이 포인터 값이 null일 수 있다고 추론하고 포인터가 역참조되는 것을 확인하면 경고가 C26823
발생합니다. 보다 관대한 분석에 대해서만 C26822를 사용하도록 설정할 수 있습니다. 또한 이 검사 SAL 주석을 gsl::not_null
지원하고 코드의 고정을 설명합니다.
예시
void invalidate(int **pp);
void condition_null_dereference_invalidated(int* p)
{
if (p)
return;
invalidate(&p);
// The call above could reset the value of `p`, thus the low confidence warning.
*p = 5; // warning: C26823
}
이 경고를 해결하려면 잠재적으로 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;
}