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 is classified as:
|
You can look at examples of errors detected by the V532 diagnostic. |