Aviso C26823

Desreferenciando a variável de ponteiro possivelmente nulo 'variável' (lifetime.1)

Observações

Desreferenciar um ponteiro nulo é um problema frequente em C e C++. O mecanismo de análise inclui várias verificações para lidar com esses problemas. Para obter uma comparação, consulte esta postagem no blog. Quando o mecanismo de análise determina que um ponteiro pode ser nulo no ponto em que é desreferenciado, ele emite o aviso C26823. As causas comuns incluem um valor de retorno possivelmente nulo, caminhos de fluxo de controle que se mesclam depois que um caminho define o ponteiro como nulo ou uma chamada que pode modificar o ponteiro por meio de seu endereço. Você pode habilitar C26822 para relatar somente desreferências em que o ponteiro é conhecido como nulo. Essa verificação também dá suporte a 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 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 ocorrências 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; 
}