Bagikan melalui


Peringatan C26822

Mendereferensikan 'variabel' pointer null (lifetime.1)

Keterangan

Dereferensi pointer null sering terjadi masalah di C dan C++. Kami memiliki beberapa pemeriksaan untuk menangani masalah tersebut. Lihat posting blog ini untuk perbandingan. Ketika mesin analisis menyimpulkan nilai pointer menjadi null dan melihat bahwa pointer didereferensikan, itu akan memancarkan C26822 peringatan. Anda juga dapat mengaktifkan C26823 untuk analisis yang lebih ketat. Pemeriksaan ini juga mendukung anotasi SAL dan gsl::not_null untuk menjelaskan invarian kode.

Contoh

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 
} 

Untuk mengatasi peringatan ini, pastikan tidak ada dereferensi pointer null dalam kode, berpotensi dengan menambahkan pemeriksaan null. Jika kode ditemukan benar, temuan positif palsu sering dapat diperbaiki dengan menggunakan gsl::not_null atau anotasi SAL. Ada beberapa contoh cara menggunakan beberapa anotasi tersebut di bawah ini:

_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; 
}