C++ memcpy()与拷贝函数的区别
- memcpy(void*, conut void*, int)
- 拷贝函数
最近在项目中二次开发智能卡测试平台的Https模块,发现一个BUG
BUG现象
当第二次运行脚本,执行完其中一个子函数,便会在CString释放过程中,程序抛出断言
解决思路
首先看函数内部传参过程,发现有形参被”拷贝”了,猜测自己的拷贝方法有问题,网上了解memcpy以及拷贝函数的原理
BUG原因
调用函数与被调函数之间形参传递后,我用了memcpy将形参(结构体内含指针成员)“复制”给了局部变量,可实际上memcpy不会对new的对象进行拷贝,意味着它可对源地址进行操作,导致被调函数调用析构函数释放局部变量后,先前的调用函数操作了空指针。
解决方法
1、用拷贝函数实现备份即可,例如:
结构体类型 局部变量名;
局部变量名 = 结构体形参