Поделиться через


Предупреждение C26822

Отмена ссылки на указатель null "переменная" (время существования.1)

Замечания

Разыменовывание указателя NULL часто возникает в C и C++. У нас есть несколько проверок для решения таких проблем. См. эту запись блога для сравнения. Когда подсистема анализа выводит значение указателя на значение NULL и видит, что указатель получает разыменовку, он выдает C26822 предупреждение. Вы также можете включить C26823 для более строгого анализа. Эта проверка также поддерживает заметки SAL и gsl::not_null описывать инварианты кода.

Пример

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 
} 

Чтобы устранить это предупреждение, убедитесь, что в коде нет разыменовки указателя NULL, потенциально путем добавления проверок NULL. В случае, если код был найден правильным, ложные положительные результаты часто можно исправить с помощью gsl::not_null или заметок SAL. Ниже приведены некоторые примеры использования некоторых из этих заметок:

_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; 
}