﻿# V774\. Pointer was used after the memory was released\.

Анализатор обнаружил использование указателя, который ссылается на освобождённый участок памяти\. Это является неопределённым поведением и может привести к разнообразнейшим последствиям\.

Некоторые возможные варианты:

* при записи по такому указателю можно испортить какой\-то другой объект в памяти;
* при чтении можно получить случайные значения;
* работа с указателем приведёт к аварийному завершению программы\.

Рассмотрим пример такого кода:

```cpp
for (node *p = head; p != nullptr; p = p->next)
{
  delete p;
}
```

В данном примере при выполнении выражения 'p \= p\-\>next' произойдёт разыменование указателя p, удалённого в теле цикла\. Необходимо было сначала вычислить это выражение и только потом освободить память\. Исправленный вариант кода:

```cpp
node *p = head;
while (p != nullptr)
{
  node *prev = p;
  p = p->next;
  delete prev;
}
```

Неприятное в таких ошибках, что долгое время может казаться, что программа работает корректно\. При этом, всё может сломаться после простого рефакторинга кода, добавлении новой переменной, смены компилятора и так далее\.