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