V772. Calling the 'delete' operator for a void pointer will cause undefined behavior.

The analyzer detected a possible error that has to do with using the 'delete' or 'delete []' operator together with a non-typed pointer (void*). As specified by the C++ standard (section $5.3.5/3), such use of 'delete' results in undefined behavior.

Consider the following example:

class Example
{
  int *buf;

public:
  Example(size_t n = 1024) { buf = new int[n]; }
  ~Example() { delete[] buf; }
};

....
void *ptr = new Example();
....
delete ptr;
....

What is dangerous about this code is that the compiler does not actually know the type of the 'ptr' pointer. Therefore, deleting a non-typed pointer may cause various defects, for example, a memory leak, as the 'delete' operator will not call the destructor for the object of type 'Example' pointed to by 'ptr'.

If you really mean to use a non-typed pointer, then you need to cast it to the original type before using 'delete' ('delete[]'), for example:

....
void *ptr = new Example();
....
delete (Example*)ptr;
....

Otherwise, it is recommended that you use only typed pointers with 'delete' ('delete[]') to avoid errors:

....
Example *ptr = new Example();
....
delete ptr;
....

According to Common Weakness Enumeration, potential errors found by using this diagnostic are classified as CWE-758.

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


Bugs Found

Checked Projects
409
Collected Errors
14 072
This website uses cookies and other technology to provide you a more personalized experience. By continuing the view of our web-pages you accept the terms of using these files. If you don't want your personal data to be processed, please, leave this site. Learn More →
Accept