智能指针与memmove同时使用,造成程序崩溃
来源:互联网 发布:提醒软件reminder 编辑:程序博客网 时间:2024/06/06 00:07
做图像处理相关项目时,碰到一个程序崩溃问题,费了很多时间和精力才找到问题。按照笔者经验,程序崩溃很大可能是释放空指针或者数组越界的原因。而笔者使用的是智能指针,想当然的认为智能指针自动累计不应该有问题才对。不断的排查原因之后,发现最终的原因是智能指针与memmove同时使用,造成对类的对象释放时,产生对空指针的释放。详细解说如下:
当使用智能指针,示例
classData
{
…
private:
std::shared_ptr<ImageDetection> _pImageDetection;
};
首先,智能指针将类指向的对象与计数器关联。每创建一个类的新对象,引用计数+1(包括拷贝构造函数的使用)。调用析构函数,引用计数减1。当计数器为0时,删除基础对象。所有被创建的新的对象都共享同一指针。
而如果利用memmove对类进行拷贝时,示例:
memmove(imgDet, Data._pImageDetection, sizeof(ImageDetection));不会增加计数器的数量。
造成的结果是:智能指针使用的实际次数大于计数器的数值。当最后一次调用析构函数时,计数器已经为0,相当于此时析构函数释放空指针,因此会造成程序运行崩溃。
0 0
- 智能指针与memmove同时使用,造成程序崩溃
- C++指针未初始化和编译器优化造成的奇怪的程序崩溃
- TLMDTrackBar造成程序启动时崩溃
- c++ 智能指针的设计与使用
- 使用[NSMutableDictionary dictionary]程序崩溃问题(野指针)
- netlink 使用后关机造成内核崩溃。
- 指针变动引起程序崩溃
- 使用适当的智能指针优化下面的程序
- 智能指针与数组
- 用Method Swizzling来避免数组越界与可变字典value值为nil造成的程序崩溃
- 使用Boost智能指针
- 使用Boost智能指针
- 智能指针的使用
- 智能指针使用
- 智能指针使用摘要
- 智能指针的使用
- 智能指针的使用
- 智能指针使用介绍
- 反射中getMethods 与 getDeclaredMethods 的区别
- SpringMVC 史上最全最强详细示例实战教程
- css画一个三角形
- ToggleButton(开关按钮)
- sql server中,N''表示什么意思?
- 智能指针与memmove同时使用,造成程序崩溃
- RxJava处理网络连接失败和timer()、interval()、delay()之间的区别
- linux hadoop本地集群时间同步
- StringProblem(for lab)
- Android学习之 adb被占用解决办法
- Kafka性能测试方法及Benchmark报告
- ScratchView:一步步打造万能的 Android 刮奖效果控件
- 欢迎使用CSDN-markdown编辑器
- TCP/IP详解,卷1:协议,第六章:ICMP,Internet控制报文协议