다음을 통해 공유


경고 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; 
}