本文主要是介绍实例介绍利用valgrind定位memcpy内存重叠问题------顺便再次说说memcpy和memmove的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
继续介绍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
这篇关于实例介绍利用valgrind定位memcpy内存重叠问题------顺便再次说说memcpy和memmove的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!