﻿# V2013\. Consider inspecting the correctness of handling the N argument in the 'Foo' function\.

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

Бывает полезно отследить все вызовы COM\-интерфейсов, где указатель на какой\-то класс явно приводится к указателю целочисленного типа или просто к целочисленному типу\. Некоторые пользователи хотят иметь возможность проверить, правильно ли обрабатываются переданные данные на стороне COM\-сервера\.

Предположим, имеется какой\-то контейнер, содержащий в себе массив элементов типа unsigned\. Он передаётся в функцию, которая интерпретирует его как массив элементов типа '[size\_t](https://pvs-studio.ru/ru/blog/terms/0044/)'\. Этот код будет корректно работать в 32\-битной системе, но в 64\-битной программе данные начнут интерпретироваться неправильно\. Пример:

```cpp
MyVector<unsigned> V;
pInterface->Foo((unsigned char *)(&V));
....
void IMyClass::Foo(unsigned char *p)
{
  MyVector<size_t> *V = (V *)(p);
  ....
}
```

Фактически, это [64\-битная ошибка](https://pvs-studio.ru/ru/blog/terms/0002/)\. Мы не стали включать в [набор 64\-битных диагностик](https://pvs-studio.ru/ru/pvs-studio/), так как они слишком специфична\. Диагностика позволяет найти потенциально опасные вызовы, а уже программист должен глазами изучить методы, принимающие данные и разобраться, имеет место ошибка или нет\.