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