警告 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 ポインターの逆参照がないことを確認します。 コードが正しいことがわかった場合は、多くの場合、 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;
}