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 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 est null au point où il est déréféré, il émet un avertissement C26822. Par exemple, le pointeur peut être explicitement affecté nullptr, ou la déréférence peut se produire sur une branche qui établit que le pointeur a la valeur nulle. Vous pouvez également activer C26823 pour signaler des déréférencements où un pointeur peut être null. Cette vérification prend également en charge les annotations SAL et gsl::not_null pour décrire 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 signalements faux positifs peuvent souvent être corrigés à l’aide de gsl::not_null ou 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;
}