오류:
삭제자 오류 해결: memcpy-param-overlap
비고
Note
플래그는 /Oi 오류를 안정적으로 검색 memcpy-param-overlap 하는 데 필요합니다. 이 플래그는 컴파일러에 다른 함수를 내장 함수로 처리 memcpy 하도록 지시합니다. 이는 표준 라이브러리의 일부 버전이 이러한 함수를 구현하기 때문에 필요합니다. ASan은 동적 분석 도구이므로 관찰 가능한 런타임 효과로만 오류를 감지할 수 있습니다.
/O2 또한 설정되면 이러한 함수의 내장 변형이 사용되도록 보장되지 않으므로 ASan에서 오류를 안정적으로 검색 memcpy-param-overlap 하지 못할 수 있습니다. 자세한 내용은 문서를 참조 /Oi 하세요.
CRT 함수 memcpy는 겹치는 메모리를 지원하지 않습니다. CRT는 겹치는 메모리memcpy를 memmove 지원하는 대안을 제공합니다.
일반적인 오류는 의미상 같음으로 처리하는 memmove 것입니다 memcpy.
Example
// 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
결과 오류
참고하십시오
AddressSanitizer 개요
AddressSanitizer 알려진 문제
AddressSanitizer 빌드 및 언어 참조
AddressSanitizer 런타임 참조
AddressSanitizer 섀도 바이트
AddressSanitizer 클라우드 또는 분산 테스트
AddressSanitizer 디버거 통합
AddressSanitizer 오류 예제