Partager via


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 case activée 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 case activée 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, assurez-vous qu’il n’existe aucune déréférence de pointeur Null dans le code, potentiellement en ajoutant des case activée 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; 
}