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?
Your message has been sent. We will email you at
If you do not see the email in your inbox, please check if it is filtered to one of the following folders: