﻿# V2617\. MISRA\. Object should not be assigned or copied to an overlapping object\.

Диагностическое правило основано на руководстве [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

Поведение не определено, когда создаются два объекта, которые частично перекрываются в памяти, и один из них присваивается или копируется в другой\.

Такое может случиться, например, при использовании функции '[memcpy](https://en.cppreference.com/w/c/string/byte/memcpy)', когда перекрываются области памяти источника и приемника:

```cpp
void func(int *x)
{
  memcpy(x, x+2, 10 * sizeof(int));
}
```

В данном случае указатель на источник данных '\(x\+2\)' смещен относительно приемника данных на 8 байт \('sizeof\(int\) \* 2'\)\. Попытка копирования 40 байт в приемник из источника приведет к частичному перекрытию области памяти источника\.

Для исправления ошибки необходимо использовать специальную функцию для таких операций – '[memmove](https://en.cppreference.com/w/c/string/byte/memmove)' – или скорректировать заданные смещения источника и приемника, чтобы не происходило перекрытия областей памяти\.

Пример корректного кода:

```cpp
void func(int *x)
{
  memmove(x, x+2, 10 * sizeof(int));
}
```