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