Предупреждение C26823
Отмена ссылки на возможное значение NULL указателя "переменная" (время существования.1)
Замечания
Разыменовывание указателя NULL часто возникает в C и C++. У нас есть несколько проверок для решения таких проблем. См. эту запись блога для сравнения. Когда подсистема анализа выводит значение null и видит, что указатель получает разыменовку, он выдает C26823
предупреждение. Вы можете включить C26822 только для более разрешительного анализа. Эта проверка также поддерживает заметки SAL и gsl::not_null
описывать инварианты кода.
Пример
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
}
Чтобы устранить это предупреждение, убедитесь, что в коде нет разыменовки указателя 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;
}