C++ 一次深拷贝与浅拷贝(结构体)引起的 “血案”

C++ memcpy()与拷贝函数的区别


  • memcpy(void*, conut void*, int)
  • 拷贝函数

最近在项目中二次开发智能卡测试平台的Https模块,发现一个BUG

BUG现象

当第二次运行脚本,执行完其中一个子函数,便会在CString释放过程中,程序抛出断言

解决思路

首先看函数内部传参过程,发现有形参被”拷贝”了,猜测自己的拷贝方法有问题,网上了解memcpy以及拷贝函数的原理

BUG原因

调用函数与被调函数之间形参传递后,我用了memcpy将形参(结构体内含指针成员)“复制”给了局部变量,可实际上memcpy不会对new的对象进行拷贝,意味着它可对源地址进行操作,导致被调函数调用析构函数释放局部变量后,先前的调用函数操作了空指针。

解决方法

1、用拷贝函数实现备份即可,例如:

结构体类型 局部变量名;
局部变量名 = 结构体形参
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值