警告 C26822

null ポインター 'variable' の逆参照 (lifetime.1)

備考

C および C++ では、null ポインターの逆参照が頻繁に問題になります。 分析エンジンには、このような問題に対処するためのいくつかのチェックが含まれています。 比較については、この ブログ記事を参照してください。 逆参照された時点でポインターが null であると分析エンジンが判断すると、警告 C26822 が出力されます。 たとえば、ポインターに明示的に null がnullptr割り当てられている場合や、ポインターが null であることを確立する分岐で逆参照が発生する場合があります。 C26823 を有効にして、ポインターが null である可能性がある参照解除を報告することもできます。 このチェックでは、コードの不変性を記述するための 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 ポインターの逆参照がないことを確認してください。 コードが正しいことがわかった場合は、多くの場合、gsl::not_null または SAL 注釈を使用して誤検知を修正できます。 これらの注釈の一部を使用する方法の例を次に示します。

_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; 
}