오류: memcpy-param-overlap
삭제자 오류 해결: memcpy-param-overlap
CRT 함수 memcpy
는 겹치는 메모리를 지원하지 않습니다. CRT는 겹치는 메모리memmove
를 memcpy
지원하는 대안을 제공합니다.
일반적인 오류는 의미상 같음으로 처리하는 memmove
것입니다 memcpy
.
예시
// example1.cpp
// memcpy-param-overlap error
#include <string.h>
__declspec(noinline) void bad_function() {
char buffer[] = "hello";
memcpy(buffer, buffer + 1, 5); // BOOM!
}
int main(int argc, char **argv) {
bad_function();
return 0;
}
이 예제를 빌드하고 테스트하려면 Visual Studio 2019 버전 16.9 이상 개발자 명령 프롬프트에서 다음 명령을 실행합니다.
cl example1.cpp /fsanitize=address /Zi /Oi
devenv /debugexe example1.exe
/Oi 플래그는 컴파일러에 함수를 처리하고 memmove
내장 함수로 처리 memcpy
하도록 지시합니다. 이는 표준 라이브러리의 일부 버전이 동일한 방식으로 구현 memcpy
하기 memmove
때문에 필요합니다. ASAN은 동적 분석 도구이므로 관찰 가능한 런타임 효과가 있는 오류만 검색합니다.
결과 오류
참고 항목
AddressSanitizer 개요
AddressSanitizer 알려진 문제
AddressSanitizer 빌드 및 언어 참조
AddressSanitizer 런타임 참조
AddressSanitizer 섀도 바이트
AddressSanitizer 클라우드 또는 분산 테스트
AddressSanitizer 디버거 통합
AddressSanitizer 오류 예제