﻿# V532\. Consider inspecting the statement of '\*pointer\+\+' pattern\. Probably meant: '\(\*pointer\)\+\+'\.

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:

```cpp
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\+\+;":

```cpp
int *p;
...
p++;
```

2\) If the developer intended to increment the value instead of the pointer, we should write it so:

```cpp
int *p;
...
(*p)++;
```

If the "\*p\+\+" expression's result is used, the analyzer considers the code correct\. This is a sample of safe code:

```cpp
while(*src)
 *dest++ = *src++;
```

Let's study a sample taken from a real application:

```cpp
STDMETHODIMP CCustomAutoComplete::Next(
  ULONG celt, LPOLESTR *rgelt, ULONG *pceltFetched)
{
  ...
  if (pceltFetched != NULL)
    *pceltFetched++;
  ...
```

In this case, parentheses are missing\. This is the correct code:

```cpp
if (pceltFetched != NULL)
    (*pceltFetched)++;
```