The analyzer detected a potential error: a pointer dereferencing operation is present in code but the value the pointer refers to is not used in any way.
Let's study this sample:
int *p;
...
*p++;
The "*p++" expression performs the following actions. The "p" pointer is incremented by one, but before that a value of the "int" type is fetched from memory. This value is not used in any way, which is strange. It looks as if the dereferencing operation "*" is unnecessary. There are several ways of correcting the code:
1) We may remove the unnecessary dereferencing operation - the "*p++;" expression is equal to "p++;":
int *p;
...
p++;
2) If the developer intended to increment the value instead of the pointer, we should write it so:
int *p;
...
(*p)++;
If the "*p++" expression's result is used, the analyzer considers the code correct. This is a sample of safe code:
while(*src)
*dest++ = *src++;
Let's study a sample taken from a real application:
STDMETHODIMP CCustomAutoComplete::Next(
ULONG celt, LPOLESTR *rgelt, ULONG *pceltFetched)
{
...
if (pceltFetched != NULL)
*pceltFetched++;
...
In this case, parentheses are missing. This is the correct code:
if (pceltFetched != NULL)
(*pceltFetched)++;
This diagnostic rule is classified as:
|
You can look at examples of errors detected by the V532 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: