# V574. Pointer is used both as an array and as a pointer to single object.

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

Рассмотрим пример ошибки, которую анализатор нашёл сам в себе:

    TypeInfo *factArgumentsTypeInfo =
      new (GC_QuickAlloc) TypeInfo[factArgumentsCount];
    for (size_t i = 0; i != factArgumentsCount; ++i)
    {
      Typeof(factArguments[i], factArgumentsTypeInfo[i]);
      factArgumentsTypeInfo->Normalize();
    }

Подозрительно, что с переменной factArgumentsTypeInfo мы работаем как с массивом "factArgumentsTypeInfo[i]" и как с указателем на один объект "factArgumentsTypeInfo ->". На самом деле необходимо вызвать функцию Normalize() для всех элементов. Исправленный вариант кода:

    TypeInfo *factArgumentsTypeInfo =
      new (GC_QuickAlloc) TypeInfo[factArgumentsCount];
    for (size_t i = 0; i != factArgumentsCount; ++i)
    {
      Typeof(factArguments[i], factArgumentsTypeInfo[i]);
      factArgumentsTypeInfo[i].Normalize();
    }

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

CWE-823 CERT-EXP08-C

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