# 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:

    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:

    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.

This diagnostic is classified as:

CWE-416 CERT-MEM30-C CERT-MEM50-CPP

You can look at examples of errors detected by the V774 diagnostic.