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