Исходный и целевой аргументы функции копирования имеют перекрывающуюся память
Этот дефект возникает, когда происходит перекрытие памяти между исходным и конечным аргументом функции копирования, такой как 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 |