2010-09-03 4 views

Répondre

5

C'est vous qui pouvez fournir la fonction memmove avec des zones de mémoire qui se chevauchent. Prenez deux pointeurs dans le même tableau et vous pouvez facilement vous retrouver avec des zones de mémoire se chevauchant.

Bien sûr, vous pouvez également créer facilement des objets qui se chevauchent via des unions.

Il n'est pas clair ce que vous entendez par la deuxième partie de la question ("comment cette fonction peut-elle encore copier correctement le bloc de mémoire"). Où voyez-vous le problème ici?

+0

Je ne comprends pas comment une fonction gérerait problème de chevauchement de mémoire –

+0

Cela fonctionne comme si la source a été copiée dans un autre tampon, puis copiée à la destination. Memcpy() copie directement la source vers la destination. – Jefferson

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

Ce qui nécessite de déplacer les octets à partir de la fin. Memcpy() en fait un gâchis. Le chevauchement de mémoire ne se produit pas de lui-même.

+0

Strictement parlant, 'memcpy' a un comportement indéfini s'il est utilisé de cette façon. Cela pourrait bien fonctionner, par exemple s'il était écrit en supposant que la copie en sens inverse est plus rapide, ou si 'memcpy' était simplement implémenté comme un appel à' memmove', mais vous ne devriez jamais compter sur de telles choses. :-) –

+0

pourquoi voudrait-on jamais utiliser memcpy s'il connaît memmove;) –

+0

Parce que memcpy() est plus rapide. –

Questions connexes