Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Dereferenziare un puntatore Null 'variable' (lifetime.1)
Osservazioni:
La dereferenziazione di un puntatore Null è un problema frequente in C e C++. Abbiamo diversi controlli per affrontare tali problemi. Per un confronto, vedere questo post di blog. Quando il motore di analisi deduce il valore di un puntatore come Null e rileva che il puntatore viene dereferenziato, genera un C26822 avviso. È anche possibile abilitare C26823 per un'analisi più rigorosa. Questo controllo supporta anche le annotazioni SAL e gsl::not_null per descrivere le invarianti del codice.
Esempio
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
}
Per risolvere questo avviso, assicurarsi che nel codice non sia presente alcuna dereferenziazione del puntatore Null, potenzialmente aggiungendo controlli Null. Nel caso in cui il codice sia stato trovato corretto, i risultati falsi positivi possono spesso essere corretti usando gsl::not_null o annotazioni SAL. Di seguito sono riportati alcuni esempi su come usare alcune di queste annotazioni:
_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;
}