2010-09-03 3 views

답변

5

"메모리 오버랩"자체적으로 발생하지 않습니다. 겹치는 메모리 영역이있는 memmove 함수를 제공 할 수있는 것은 당신입니다. 두 포인터를 같은 배열로 가져 가면 중복 메모리 영역으로 쉽게 끝날 수 있습니다.

물론 노동 조합을 통해 중복되는 객체를 쉽게 만들 수도 있습니다.

질문의 두 번째 부분 ("이 기능으로 메모리 블록을 올바르게 복사 할 수있는 방법")이 무슨 뜻인지 명확하지 않습니다. 여기서 문제는 어디서 볼 수 있습니까?

+0

나는 어떻게 함수가 메모리 오버랩 문제를 처리 할까? –

+0

소스가 다른 버퍼에 복사 된 다음 대상에 복사 된 것처럼 작동한다. Memcpy()는 소스를 직접 목적지에 복사합니다. – Jefferson

3
memmove(p+1, p, 42); 

끝에서 시작하여 바이트를 이동해야하는 경우. Memcpy()는 그것을 엉망으로 만든다.

+0

엄밀히 말하면,'memcpy'는 이런 식으로 사용되면 정의되지 않은 동작을합니다. 예를 들어 거꾸로 복사하는 것이 더 빠르다거나'memcpy'가'memmove' 호출로 구현되었다고 가정하면 쓰일 수 있지만, 결코 그런 것에 의존해서는 안됩니다. :-) –

+0

memmove를 알고 있다면 memcpy를 사용하는 이유는 무엇입니까?) –

+0

memcpy()가 빠르기 때문에 왜 memcpy를 사용합니까? –