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

The analyzer detected the use of a pointer that points to released buffer\. This is considered undefined behavior and can lead to various complications\.

Some possible scenarios:

* writing to memory pointed to by such a pointer can spoil some other object;
* reading from memory pointed to by such a pointer can result in returning random values;
* handling such a pointer will result in a crash\.

Consider the following example:

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

In this code, the 'p' pointer, which gets deleted in the loop body, will be dereferenced when evaluating the 'p \= p\-\>next' expression\. The expression must be evaluated first, and only then can the storage be released\. This is what the fixed code should look like:

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

What makes errors of this kind especially annoying is that programs may appear to work properly for a long time and break after slight refactoring, adding a new variable, switching to another compiler, and so on\.