Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Déréférencement d’un pointeur potentiellement nul 'variable' (lifetime.1)
Remarques
Le déréférencement d’un pointeur nul est un problème fréquent en C et C++. Le moteur d’analyse comprend plusieurs vérifications pour résoudre ces problèmes. Pour une comparaison, consultez ce billet de blog. Lorsque le moteur d’analyse détermine qu’un pointeur peut être null au point où il est déréféré, il émet un avertissement C26823. Les causes courantes incluent une valeur de retour éventuellement Null, des chemins de flux de contrôle qui se fusionnent après qu’un chemin définit le pointeur sur Null ou un appel qui peut modifier le pointeur par le biais de son adresse. Vous pouvez autoriser C26822 à signaler uniquement les déréférencements où le pointeur est connu comme null. Cette vérification prend également en charge les annotations SAL et gsl::not_null pour décrire 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 positifs peuvent souvent être corrigés à l’aide de gsl::not_null ou d’annotations SAL. Il existe quelques exemples de la façon d’utiliser 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;
}