The analyzer detected a possible error that has to do with using the operator delete or operator delete[] together with a non-typed pointer (void*). As specified by the C++ standard (subclause $7.6.2.8/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 Example type 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;
....
This diagnostic rule is classified as:
|
You can look at examples of errors detected by the V772 diagnostic. |
Was this page helpful?