Как происходит перекрытие памяти и как оно контролируется?
читая о memmove я прочитал, что он может справиться ПЕРЕКРЫТИЯ ПАМЯТИно я не могу понять, как перекрытие memmory может происходить между двумя строками и как эта функция может правильно копировать блок памяти.
2 ответов
"перекрытие памяти" не происходит само по себе. Это вы можете поставить memmove
функция с областями памяти, которые перекрываются. Возьмите два указателя в тот же массив, и вы можете легко закончить с перекрывающимися областями памяти.
конечно, вы также можете легко создавать перекрывающиеся объекты через объединения.
неясно, что вы подразумеваете под второй частью вопроса ("как эта функция может правильно копировать блок памяти"). Где делать видишь, в чем проблема?
memmove(p+1, p, 42);
что требует перемещения байтов, начиная с конца. Memcpy () делает из этого беспорядок.