Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Desreferenciar um ponteiro nulo 'variable' (lifetime.1)
Remarks
Desreferenciar um ponteiro nulo é um problema frequente em C e C++. O motor de análise inclui várias verificações para lidar com estes problemas. Para uma comparação, veja este artigo no blogue. Quando o motor de análise determina que um ponteiro é nulo no ponto onde é desreferenciado, emite o aviso C26822. Por exemplo, o ponteiro pode ser explicitamente atribuído nullptr, ou a desreferência pode ocorrer num ramo que estabelece que o ponteiro é nulo. Também pode ativar o C26823 para reportar desreferências onde um ponteiro possa ser nulo. Esta verificação também suporta anotações SAL e gsl::not_null para descrever invariantes do código.
Exemplo
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
}
Para resolver este aviso, certifique-se de que não há desreferenciação de ponteiros nulos no código, potencialmente adicionando verificações de nulo. Caso o código tenha sido considerado correto, os falsos positivos podem frequentemente ser corrigidos usando gsl::not_null ou anotações SAL. Abaixo estão alguns exemplos de como usar algumas dessas anotações:
_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;
}