對可能為 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 指標解除參考,可能是藉由新增 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;
}