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

Анализатор обнаружил потенциально возможную ошибку, связанную с тем, что в коде присутствует разыменование указателя, но значение, на которое указывает указатель, никак не используется\.

Рассмотрим пример:

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

Выражение "\*p\+\+" выполняет следующие действия\. Указатель "p" будет увеличен на единицу, но прежде этого из памяти будет извлечено значение типа "int"\. Это значение никак не используется, что странно\. Получается, что операция разыменования "\*" является лишней\. Возможны следующие варианты, как следует поступить с кодом:

1\) Удалить лишнее разыменование\. Высказывание "\*p\+\+;" эквивалентно "p\+\+;":

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

2\) На самом деле хотели увеличить не указатель, а значение\. Тогда следует написать:

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

Если результат выражения "\*p\+\+" используется, то анализатор считает код корректным\. Пример безопасного кода:

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

Рассмотрим пример взятый из реального приложения:

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

В данном случае забыты круглые скобки\. Корректный вариант:

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