﻿# V115\. Memsize type is used for throw\.


> Это правило входит в группу "Диагностика 64\\\-битных ошибок"\\\. Разработка правил этой группы больше не ведётся, и в будущем они могут быть отключены\\\. Если вы используете эти правила, \[свяжитесь с нашей поддержкой\]\(https://pvs\-studio\.ru/ru/about\-feedback/\) — мы поможем найти замену или предложим альтернативное решение\\\.

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

Рассмотрим пример\. Рассмотрим код, генерирующий и обрабатывающий исключение\.

```cpp
char *ptr1, *ptr2;
...
try {
  throw ptr2 - ptr1;
}
catch(int) {
  Foo();
}
```

Ошибка в том, что на 64\-битной системе обработчик исключения не сработает и функция 'Foo\(\)' не будет вызвана\. Это связано с тем, что выражение "ptr2 \- ptr1" имеет тип 'ptrdiff\_t', который на 64\-битной системе не совпадает с типом 'int'\.

Исправление описанной ситуации заключается в использовании корректного типа для перехвата исключения\. В данном случае \- 'ptrdiff\_t', как показано ниже\.

```cpp
try {
  throw ptr2 - ptr1;
}
catch(ptrdiff_t) {
  Foo();
}
```

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

Дополнительные материалы по данной теме:

1. 64\-битные уроки\. Урок 20\. Паттерн 12\. [Исключения](https://pvs-studio.ru/ru/blog/lessons/0020/)\.