2010-09-03 7 views

Antwort

5

"Speicherüberlappung" tritt nicht von selbst auf. Sie können die Funktion memmove mit überlappenden Speicherbereichen versorgen. Nehmen Sie zwei Zeiger in das gleiche Array und Sie können leicht mit überlappenden Speicherregionen enden.

Natürlich können Sie überlappende Objekte auch leicht durch Verbindungen erstellen.

Es ist nicht klar, was Sie mit dem zweiten Teil der Frage meinen ("wie kann diese Funktion den Speicherblock immer noch korrekt kopieren"). Wo siehst du das Problem hier?

+0

Ich bekomme nicht, wie eine Funktion Speicher überlappende Problem behandeln würde –

+0

Es funktioniert, als ob die Quelle in einen anderen Puffer kopiert und dann an das Ziel kopiert wurde. Memcpy() kopiert die Quelle jedoch direkt zum Ziel. – Jefferson

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

Das erfordert das Verschieben der Bytes beginnend am Ende. Memcpy() macht ein Durcheinander.

+0

Genau genommen hat 'memcpy' ein undefiniertes Verhalten, wenn es auf diese Weise verwendet wird. Es könnte denkbar sein, dass es funktioniert, zum Beispiel, wenn geschrieben wird, dass Rückwärtskopieren schneller ist, oder wenn 'memcpy' nur als Aufruf von' memmove' implementiert wurde, aber Sie sollten sich niemals auf solche Dinge verlassen. :-) –

+0

warum würde man memcpy überhaupt benutzen, wenn er memmove kennt;) –

+0

Weil memcpy() schneller ist. –

Verwandte Themen