Исходный и целевой аргументы функции копирования имеют перекрывающуюся память
Этот дефект возникает, когда происходит перекрытие памяти между исходным и конечным аргументом функции копирования, такой как memcpy или strcpy. Например, исходный и конечный аргументы strcpy являются указателями на различные элементы в одной строке.
Если существует перекрытие памяти между исходным и конечным аргументами функций копирования, согласно стандартам C, поведение не определено.
Определите, является ли перекрытие памяти тем, что вы хотите. Если это так, найдите альтернативную функцию. Для образца:
Если вы используете memcpy чтобы скопировать значения из одного места в памяти в другое, используйте memmove вместо memcpy.
Если вы используете strcpy чтобы скопировать одну строку в другую, используйте memmove вместо strcpy, следующим образом:
s = strlen(source); memmove(destination, source, s + 1);
strlen определяет длину строки без терминатора строки null. Поэтому необходимо двигаться s+1 байты вместо s байты.
| Группа: Программирование |
| Язык: C | C++ |
| По умолчанию: Off |
Синтаксис командной строки: OVERLAPPING_COPY |
| Влияние: Средний |
| ИДЕНТИФИКАТОР CWE: 475, 628, 687 |