码迷,mamicode.com
首页 > 其他好文 > 详细

memcpy和memmove

时间:2019-08-06 00:49:54      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:今天   新项目   启动进程   开始   逻辑   成员变量   报错   没有   处理   

  之前并不知道memmove,只知道memcpy。想当然的以为如果想将一个数组后面的内容移动在数组的前面,用memcpy就可以了。

  由于做的是新项目,又是我一个人开发,终于得到在实际项目上用c++11的机会了。今天将项目转到新环境,解决一些编译问题后正常启动进程。满心的欢喜的以为可以了。结果在查看日志的时候发现收到的网络包一直在报错,总是表示接收的消息头有问题。开始以为是我的逻辑有问题。函数很简单,就是接收网络消息,根据头判断整个消息包的大小,如果接收到消息包大于想要的消息包,就说明有多个请求同时到了。只要将请求一个一个分开来处理就好了。

  我的实现方式是将所收到的消息都放在一个成员变量的数组里,如果处理一个消息之后发现还有多的内容,就将数组后面多的内容覆盖到数组前面来,使用的函数是memcpy。

  第一步是打断点调试,由于没有定位到具体的错误,所以打的断点也不对,总是找不到错误在哪。第二步是加日志,发现只有当多个请求同时收到时才有可能会出现这个报错。仔细查看逻辑确认没有错误,终于将目光放在了memcpy上,搜索了一下,发现memcpy在源、目地址有重叠的时候不保证源地址的重叠区域在拷贝之前不被覆盖!这个时候应该用memmove!悄然大悟!改成memmove后顺利解决bug!

  这个小bug浪费的时间还不少,主要还是bug定位不准,完全没有考虑到memcpy会有问题。有句话说得好,当你排除一切不可能的情况,剩下的,不管多难以置信,那都是事实。

 

memcpy和memmove

标签:今天   新项目   启动进程   开始   逻辑   成员变量   报错   没有   处理   

原文地址:https://www.cnblogs.com/RookieSuperman/p/11306477.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!