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

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

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

    int *p;
    ...
    *p++;

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

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

    int *p;
    ...
    p++;

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

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

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

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

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

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

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

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

Данная диагностика классифицируется как:

CWE-480 CERT-EXP30-C

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V532.