>
>
>
V774. Pointer was used after the memory…


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:

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