# V514. Potential logical error. Size of a pointer is divided by another value.

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

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

    const size_t StrLen = 16;
    LPTSTR dest = new TCHAR[StrLen];
    TCHAR src[StrLen] = _T("string for V514");
    _tcsncpy(dest, src, sizeof(dest)/sizeof(dest[0]));

В выражении "sizeof(dest)/sizeof(dest[0])" происходит деление размера указателя на размер элемента, на который ссылается указатель. В результате мы можем получить различное количество скопированных байтов в зависимости от размера указателя и типа TCHAR, но не то количество, что планировал программист.

С учетом того, что функция _tcsncpy сама по себе не является безопасный, корректный и более безопасный код может выглядеть следующим образом:

    const size_t StrLen = 16;
    LPTSTR dest = new TCHAR[StrLen];
    TCHAR src[StrLen] = _T("string for V514");
    _tcsncpy_s(dest, StrLen, src, StrLen);

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

CWE-131 CERT-ARR01-C

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