Avertissement C26822
Dereferencing a null pointer 'variable' (lifetime.1)
Notes
La déréférencement d’un pointeur Null est un problème fréquent en C et C++. Nous avons plusieurs vérifications pour résoudre ces problèmes. Consultez ce billet de blog pour une comparaison. Lorsque le moteur d’analyse déduit la valeur d’un pointeur à null et voit que le pointeur est déréféré, il émet un C26822
avertissement. Vous pouvez également activer C26823 pour une analyse plus stricte. Cette vérification prend également en charge les annotations SAL et gsl::not_null
décrit les invariants du code.
Exemple
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
}
Pour résoudre cet avertissement, vérifiez qu’il n’existe aucune déréférence de pointeur Null dans le code, potentiellement en ajoutant des vérifications Null. Dans le cas où le code était correct, les faux résultats positifs peuvent souvent être corrigés à l’aide d’annotations SAL ou à l’aide gsl::not_null
d’annotations SAL. Il existe quelques exemples d’utilisation de certaines de ces annotations ci-dessous :
_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;
}