继续介绍valgrind的使用, 看程序:
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
int main()
{
char a[] = "abcdefghijk";
memcpy(a + 1, a, 5);
printf("%s\n", a);
return 0;
}
先看看结果:
[root@xxx ~/valgrind-3.8.1/bin]# g++ -g test.cpp
[root@xxx ~/valgrind-3.8.1/bin]# ./a.out
aaacdeghijk
[root@xxx ~/valgrind-3.8.1/bin]#
啊? 怎么和预期的不一样? 原来, memcpy在拷贝的时候, 是不允许内存重叠的。 如果处理内存重叠的内存考虑, 我们应该用memmove. 看程序:
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
int main()
{
char a[] = "abcdefghijk";
memcpy(a + 1, a, 5);
printf("%s\n", a);
char b[] = "abcdefghijk";
memmove(b + 1, b, 5);
printf("%s