다음을 통해 공유


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