Aracılığıyla paylaş


Uyarı C26822

Null işaretçi 'değişken' başvurusu kaldırılıyor (yaşam süresi.1)

Açıklamalar

Null işaretçinin başvuruyu kaldırma işlemi C ve C++'da sık karşılaşılan bir sorundur. Bu tür sorunlarla başa çıkmak için birkaç denetimimiz var. Karşılaştırma için bu blog gönderisini inceleyin. Çözümleme altyapısı bir işaretçinin değerini null olarak çıkardığında ve işaretçinin başvurulduğunu gördüğünde, bir C26822 uyarı gönderir. Daha katı bir analiz için C26823'i de etkinleştirebilirsiniz. Bu denetim, SAL ek açıklamalarını ve gsl::not_null kodun sabitlerini açıklamayı da destekler.

Örnek

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 
} 

Bu uyarıyı çözmek için, büyük olasılıkla null denetimler ekleyerek kodda null işaretçi başvurusunun olmadığından emin olun. Kodun doğru bulunması durumunda hatalı pozitif bulgular genellikle veya SAL ek açıklamaları kullanılarak gsl::not_null düzeltilebilir. Aşağıda bu ek açıklamalardan bazılarının nasıl kullanılacağına dair bazı örnekler verilmiştir:

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