2010-09-03 25 views

Trả lời

5

"Chồng chéo bộ nhớ" không tự xảy ra. Chính bạn là người có thể cung cấp chức năng memmove với các vùng bộ nhớ chồng lên nhau. Đưa hai con trỏ vào cùng một mảng và bạn có thể dễ dàng kết thúc với các vùng bộ nhớ trùng lặp.

Tất nhiên, bạn cũng có thể dễ dàng tạo các đối tượng chồng chéo thông qua các công đoàn.

Không rõ ý bạn là gì bởi phần thứ hai của câu hỏi ("cách chức năng này vẫn sao chép chính xác khối bộ nhớ"). Bạn thấy vấn đề ở đâu?

+0

Tôi không nhận được làm thế nào một chức năng xử lý vấn đề chồng chéo bộ nhớ –

+0

Nó hoạt động như thể nguồn được sao chép vào bộ đệm khác, sau đó được sao chép đến đích. Memcpy() sao chép nguồn đến đích trực tiếp. – Jefferson

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

Yêu cầu di chuyển byte bắt đầu từ cuối. Memcpy() làm cho một mớ hỗn độn của nó.

+0

Nói đúng, 'memcpy' có hành vi không xác định nếu được sử dụng theo cách này. Nó có thể hình dung được, ví dụ nếu nó được viết giả sử sao chép ngược nhanh hơn, hoặc nếu 'memcpy' được thực hiện như một lời gọi đến' memmove', nhưng bạn không nên dựa vào những thứ như thế. :-) –

+0

tại sao một người sẽ sử dụng memcpy nếu anh ấy biết memmove;) –

+0

Vì memcpy() nhanh hơn. –

Các vấn đề liên quan