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 possivelmente nulo 'variável' (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 pode ser nulo no ponto em que é desreferenciado, emite o aviso C26823. As causas comuns incluem um possível valor de retorno nulo, caminhos de controlo-fluxo que se fundem após um caminho definir o ponteiro como nulo, ou uma chamada que pode modificar o ponteiro através do seu endereço. Podes ativar o C26822 para reportar apenas desreferências quando o ponteiro é sabido ser nulo. Esta verificação também suporta anotações SAL e gsl::not_null para descrever invariantes do código.
Exemplo
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
}
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;
}