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