﻿# V706\. Suspicious division: sizeof\(X\) / Value\. Size of every element in X array is not equal to divisor\.

Анализатор обнаружил в коде подозрительное деление результата оператора sizeof\(\) на другой оператор sizeof\(\) или число\. Причём оператор sizeof\(\) применяется к массиву и размер элемента не совпадает с значением делителя\. Скорее всего, в коде присутствует ошибка\. 

Пример:

```cpp
size_t A[10];
n = sizeof(A) / sizeof(unsigned);
```

В режиме сборки 32\-битной программы типы unsigned и [size\_t](https://pvs-studio.ru/ru/blog/terms/0044/) совпадают по своему размеру и 'n' будет равно десяти\. Однако в режиме сборки 64\-битной программы тип size\_t имеет размер 8 байт, а тип unsigned имеет размер всего 4 байта\. В итоге в переменную n будет записано число 20, что вряд ли является тем, чего хотел программист\.

Также ошибочным будет считаться код следующего вида:

```cpp
size_t A[9];
n = sizeof(A) / 7;
```

Размер массива в случае компиляции 32\-битной программы равен 4 \* 9 \= 36 байтам\. Делить 36 на 7 очень странно\. Что хотел программист? С эти кодом что\-то не так\.

Какие\-то конкретные рекомендации в этом случае давать сложно, поскольку каждый случай требует индивидуального подхода \- возможно, изменился размер типа, размер массива задан с ошибкой и так далее\. Часто это ошибка бывает последствием опечатки или простой невнимательности\.

Анализатор не будет выдавать предупреждение, если массив имеет тип char или uchar, поскольку подобные массивы часто используются в качестве буферов для хранения каких\-либо данных другого типа\. Пример кода, который анализатор считает безопасным:

```cpp
char A[9];
n = sizeof(A) / 3;
```