Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Desreferencing un puntero nulo 'variable' (lifetime.1)
Comentarios
La desreferenciación de un puntero nulo es un problema frecuente en C y C++. El motor de análisis incluye varias comprobaciones para tratar estos problemas. Para ver una comparación, consulte este artículo del blog. Cuando el motor de análisis determina que un puntero es NULL en el punto donde se desreferencia, emite la advertencia C26822. Por ejemplo, el puntero podría asignarse nullptrexplícitamente o la desreferencia podría producirse en una rama que establece que el puntero es NULL. También puede habilitar C26823 para notificar desreferencias en las que un puntero podría ser NULL. Esta comprobación también admite Anotaciones SAL y gsl::not_null para describir invariantes 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 comprobó que el código era 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;
}