﻿# V1004\. Pointer was used unsafely after its check for nullptr\.

Анализатор обнаружил потенциальное разыменование нулевого указателя\.  Сначала этот указатель проверялся на ноль, а потом использовался без проверки\.

Пример:

```cpp
if (p != nullptr)
{
  *p = 42;
}
....
*p += 33;
```

В случае, если указатель 'p' был равен нулю, в выражении '\*p \+\= 33' произойдёт разыменование нулевого указателя\. Поэтому нужно добавить проверку:

```cpp
if (p != nullptr)
{
  *p = 42;
}
....
if (p != nullptr)
{
  *p += 33;
}
```

Либо в этом коде 'p' всегда ненулевой и тогда проверку стоит удалить:

```cpp
*p = 42;
....
*p += 33;
```

Анализатор может выдать ложное срабатывание в следующем случае:

```cpp
if (p == nullptr)
{
  MyExit();
}
....
*p += 42;
```

Это происходит, потому что анализатор не может понять, возвращает ли функция 'MyExit' управление или нет\. Чтобы подсказать ему эту информацию, следует проаннотировать функцию одним из следующих способов:

* Атрибут C\+\+11: \[\[noreturn\]\] void MyExit\(\);
* Атрибут gcc: \_\_attribute\_\_\(\(noreturn\)\) void MyExit\(\);
* Атрибут MSVC: \_\_declspec\(\(noreturn\)\) void MyExit\(\);