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