Waarschuwing C26823

Het derefereren van een mogelijk null-aanwijzer 'variable' (lifetime.1)

Remarks

Het derefereren van een null-pointer is een veelvoorkomend probleem in C en C++. De analyse-engine bevat verschillende controles om met dergelijke problemen om te gaan. Zie dit blogbericht voor een vergelijking. Wanneer de analyse-engine bepaalt dat een aanwijzer null kan zijn op het punt waar deze wordt gederefereerd, wordt er een waarschuwing C26823 verzonden. Veelvoorkomende oorzaken zijn een mogelijk null-retourwaarde, besturingsstroompaden die worden samengevoegd nadat één pad de aanwijzer heeft ingesteld op null of een aanroep waarmee de aanwijzer via het adres kan worden gewijzigd. U kunt C26822 inschakelen om alleen dereferenties te rapporteren waarbij bekend is dat de aanwijzer null is. Deze controle ondersteunt ook SAL-aantekeningen en gsl::not_null om invarianten van de code te beschrijven.

Voorbeeld

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
}

Als u deze waarschuwing wilt oplossen, moet u ervoor zorgen dat er geen dereferentie van een nulpointer in de code plaatsvindt, mogelijk door null-controles toe te voegen. In het geval dat is vastgesteld dat de code correct is, kunnen fout-positieve bevindingen vaak worden opgelost met behulp van gsl::not_null of SAL-aantekeningen. Hieronder ziet u enkele voorbeelden van het gebruik van enkele van deze aantekeningen:

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