다음을 통해 공유


오류: memcpy-param-overlap

삭제자 오류 해결: memcpy-param-overlap

비고

Note

플래그는 /Oi 오류를 안정적으로 검색 memcpy-param-overlap 하는 데 필요합니다. 이 플래그는 컴파일러에 다른 함수를 내장 함수로 처리 memcpy 하도록 지시합니다. 이는 표준 라이브러리의 일부 버전이 이러한 함수를 구현하기 때문에 필요합니다. ASan은 동적 분석 도구이므로 관찰 가능한 런타임 효과로만 오류를 감지할 수 있습니다. /O2 또한 설정되면 이러한 함수의 내장 변형이 사용되도록 보장되지 않으므로 ASan에서 오류를 안정적으로 검색 memcpy-param-overlap 하지 못할 수 있습니다. 자세한 내용은 문서를 참조 /Oi 하세요.

CRT 함수 memcpy는 겹치는 메모리를 지원하지 않습니다. CRT는 겹치는 메모리memcpymemmove 지원하는 대안을 제공합니다.

일반적인 오류는 의미상 같음으로 처리하는 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

결과 오류

예제 1에서 memcpy-param-overlap 오류를 표시하는 디버거의 스크린샷

참고하십시오

AddressSanitizer 개요
AddressSanitizer 알려진 문제
AddressSanitizer 빌드 및 언어 참조
AddressSanitizer 런타임 참조
AddressSanitizer 섀도 바이트
AddressSanitizer 클라우드 또는 분산 테스트
AddressSanitizer 디버거 통합
AddressSanitizer 오류 예제