Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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;
}