Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Dereferencing en möjligen nullpekare "variable" (lifetime.1)
Remarks
Att avreferera en nullpekare är ett vanligt problem i C och C++. Analysmotorn innehåller flera kontroller för att hantera sådana problem. En jämförelse finns i det här blogginlägget. När analysmotorn fastställer att en pekare kan vara null vid den punkt där den avrefereras genererar den varning C26823. Vanliga orsaker är ett eventuellt null-returvärde, kontrollflödessökvägar som sammanfogas efter att en sökväg sätter pekaren till null eller ett anrop som kan ändra pekaren via dess adress. Du kan aktivera C26822 för att endast rapportera avrefereringar där pekaren är känd för att vara null. Den här kontrollen stöder även SAL-anteckningar och gsl::not_null för att beskriva kodens invarianter.
Exempel
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
}
Lös den här varningen genom att se till att det inte finns någon avreferering av null-pekare i koden, eventuellt genom att lägga till null-kontroller. Om koden visade sig vara korrekt kan falska positiva resultat ofta åtgärdas med hjälp av gsl::not_null eller SAL-annoteringar. Det finns några exempel på hur du använder några av dessa annoteringar nedan:
_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;
}