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. |