内存重叠问题主要是使用函数memcpy的时候会发生的
函数原型:
void * memcpy ( void * destination, const void * source, size_t num);
这个函数能够在source指向的空间中拷贝num个字节的内容到destination指向的空间中,当source指向的空间内容与destination指向的空间内容重叠时,就会产生这个问题,达不到预期的结果。
例子:
#include <stdio.h>
#include <string.h>
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
memcpy(arr1+2, arr1, 20);
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ", arr1[i]);
}
return 0;
}
首先,我们看上面这个例子,我们要将arr1指向的内容拷贝到arr1+2指向的内容中,拷贝20个字节,由于该数组是int类型,所以20个字节是5个元素。
那么就是这样的:

我们进行第一次拷贝,把arr1指向的内容拷贝到arr+1指向的内容中,即arr1[2] = arr1[0];
就变成了这样:

第二次拷贝

最低0.47元/天 解锁文章
1371

被折叠的 条评论
为什么被折叠?



