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.
Dereferering av en nullpekare "variabel" (lifetime.1)
Remarks
Att dereferera en nollpekare är ett vanligt problem i C och C++. Analysmotorn innehåller flera kontroller för att hantera sådana problem. För en jämförelse, se det här blogginlägget. När analysmotorn fastställer att en pekare är null vid den punkt där den avrefereras genererar den varning C26822. Pekaren kan till exempel uttryckligen tilldelas nullptr, eller så kan avreferensen inträffa på en gren som fastställer att pekaren är null. Du kan också aktivera C26823 för att rapportera avrefereringar där en pekare kan vara null. Den här kontrollen stöder även SAL-anteckningar och gsl::not_null för att beskriva kodens invarianter.
Exempel
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
}
Lös den här varningen genom att se till att det inte finns någon nullpekaravreferensiering i koden, eventuellt genom att lägga till null-kontroller. Om koden visade sig vara korrekt kan falska positiva fynd 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;
}