Partager via


Avertissement C26823

Dereferencing a éventuellement 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 que la valeur d’un pointeur peut être null et voit que le pointeur est déréféré, il émet un C26823 avertissement. Vous pouvez activer C26822 uniquement pour une analyse plus permissive. Cette vérification prend également en charge les annotations SAL et gsl::not_null décrit les invariants du code.

Exemple

void invalidate(int **pp);
void condition_null_dereference_invalidated(int* p)
{
    if (p)
        return;

    invalidate(&p);
    // The call above could reset the value of `p`, thus the low confidence warning.
    *p = 5; // warning: C26823
}

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