Advertencia C26822
Desreferencing a null pointer 'variable' (lifetime.1)
Comentarios
La desreferenciación de un puntero nulo es un problema frecuente en C y C++. Tenemos varias comprobaciones para tratar estos problemas. Consulte esta entrada de blog para obtener una comparación. Cuando el motor de análisis deduce el valor de un puntero para que sea NULL y ve que el puntero obtiene desreferenciado, emitirá una C26822
advertencia. También puede habilitar C26823 para un análisis más estricto. Esta comprobación también admite Anotaciones SAL y gsl::not_null
para describir invariables del código.
Ejemplo
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 esta advertencia, asegúrese de que no hay ninguna desreferencia de puntero null en el código, potencialmente agregando comprobaciones nulas. En caso de que se descubra que el código es correcto, los resultados de falsos positivos se suelen poder corregir mediante gsl::not_null
o Anotaciones SAL. A continuación se muestran algunos ejemplos de cómo usar algunas de esas anotaciones:
_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;
}
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente las Cuestiones de GitHub como mecanismo de retroalimentación para el contenido y lo sustituiremos por un nuevo sistema de retroalimentación. Para más información, consulta:Enviar y ver comentarios de