编程中遇到的问题总结

本文探讨了在编程中遇到的memcpy导致的未拷贝构造警告,涉及原因、可能导致的数据泄露,以及三种可能的解决方案:重写类使用拷贝构造、屏蔽警告和强制类型转换,分析了各自的优缺点。
摘要由CSDN通过智能技术生成

编程已经很熟悉了,但也时长会遇到一些问题,遂记录

1. memcpy带来的未拷贝构造警告问题

消除警告 writing to an object of type ‘class XXOO’ with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]

其问题是 memcpy如何拷贝复杂类型数组

memcpy ( &upoData[i] , &pData , sizeof ( UData ) ) ;
目前查出来的原因是,memcpy 会按照内存写入数据。并不会执行拷贝构造函数。当执行拷贝操作时,拷贝指向的类或者结构体如果存在指针,
并且指针指向了动态申请的对象或者数组。此指针将被拷贝源的指针覆盖。而当程序退出时,这部分被覆盖的数据将造成数据泄露。
这类警告应该属于编码错误。

解决方案,目前还没有决定用哪个:
1.重写类,使用拷贝构造函数,弃用memcpy。
优点,就应该这么办,缺点,工程量有点大,老代码,没有敢动。
2.MakeFile中添加[-Wclass-memaccess]将警告屏蔽。
优点,修改的时间快。
缺点,不讲武德,欺骗客户。
3.强制类型转换
memcpy ( &upoData[i] , &pData , sizeof ( UData ) ) ;---->memcpy ( (void*)&upoData[i] , (void*)&pData , sizeof ( UData ) ) ;
优点,修改的时间快。相比第二种看着舒服点。
缺点,也不太讲武德,有点欺骗客户和编译器感情。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周陽讀書

周陽也想繼往聖之絕學呀~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值