警告 C26822

取消引用 null 指针“变量”(lifetime.1)

备注

取消引用空指针是 C 和 C++ 中的常见问题。 我们提供了多项检查来处理此类问题。 请参阅此博客文章进行比较。 当分析引擎推断指针的值为 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 检查来实现)。 如果发现代码是正确的,通常可以通过使用 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; 
}