Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Desreferenciando uma 'variável' de ponteiro nulo (lifetime.1)
Comentários
Desreferenciar um ponteiro nulo é um problema frequente em C e C++. Temos várias verificações para lidar com esses problemas. Consulte esta postagem no blog para obter uma comparação. Quando o mecanismo de análise deduz que o valor de um ponteiro é nulo e vê esse ponteiro ser desreferenciado, ele emitirá um C26822 aviso. Também é possível habilitar C26823 para uma análise mais estrita. Essa verificação também dá suporte a anotações de SAL e gsl::not_null para descrever invariáveis 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 esse aviso, verifique se não há nenhuma desreferência de ponteiro nulo no código, potencialmente adicionando verificações nulas. Caso o código seja considerado correto, as conclusões de falso positivo geralmente poderão ser corrigidas usando gsl::not_null ou anotações SAL. Há alguns exemplos de como usar algumas dessas anotações abaixo:
_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;
}