﻿# V635\. Length should be probably multiplied by sizeof\(wchar\_t\)\. Consider inspecting the expression\.

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

Как правило, такая ошибка возникает, если для вычисления размера массива используется функция 'strlen' или 'wcslen'\. Нередко полученное количество символов забывают умножить на sizeof\(wchar\_t\)\. В результате в программе может возникнуть доступ за границу массива\.

Рассмотрим пример некорректного кода:

```cpp
wchar_t src[] = L"abc";
wchar_t *dst = (wchar_t *)malloc(wcslen(src) + 1);
wcscpy(dst, src);
```



В данном случае будет выделено всего 4 байта памяти\. Так как тип 'wchar\_t' имеет размер 2 или 4 байта в зависимости от [модели данных](https://pvs-studio.ru/ru/blog/terms/0012/), этой памяти может не хватить\. Для исправления ошибки требуется умножить выражение внутри 'malloc' на 'sizeof\(wchar\_t\)'\.

Корректный вариант кода:

```cpp
wchar_t *dst =
  (wchar_t *)malloc((wcslen(src) + 1) * sizeof(wchar_t));
```