警告 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;
}