师兄的项目上现在存在很多的料想不到的错误,在交流过程中,他说很多都是绕过去了,没有仔细的去纠察原因。于是我就在想内存泄露的问题影响到了项目出现了未知的错误,搜索关键词C++内存泄露,有很多前辈总结出来常见的容易出现内存泄露的地方,我在阅读的时候,结合自己的写代码习惯,还真了解不少我在代码编写过程中出现的问题,下面贴出搜索到的关键部分:

  http://blog.csdn.net/wenhm/article/details/4314863

  1. 指针成员变量分配了内存一定要释放;

    ~CApple()
    {if(NULL != m_ptrData){delete m_ptrData;m_ptrData = NULL;}
    }//需要提醒的是:上面删除m_ptrData再置NULL,是一个良好的编程习惯,可以避免产生野指针。//(当然这里对象都析构了不存在这个问题,但其它很多地方将删除的指针置NULL是非常明智的一个做法,//不然鬼知道这个指针指向的内存是否是有效的)

  2. 若不是在定义指针代码作用范围内,使用其它地方定义的指针时(比如全局指针,类成员变量指针),进行赋值操作的时候先判断原来指针是否有值,有则先释放原来的内存。
  3. 公共模块一般有init()、open()和release()、terminate()、close()两种类型的函数,不要忘记扫尾类型函数的调用。
  4. 若正常分支有内存需要释放,则不要忘了异常分支的内存释放如try语句的catch分支,函数中的多个return分支都要考虑到相应内存的释放。
  5. 动态分配的对象数组,记得使用delete[]来进行删除。基于两个考虑:

    (1)可以释放整个数组的空间;

    (2)调用数组中每个对象的析构函数。

  6. 不是采用常规内存分配(new、malloc、calloc、realloc)的内存也要记得释放,如strdup等。

    有一些C/C++ Api返回的指针是动态分配的需要使用者来负责释放,这个只要使用时看清楚Api的说明就不会有什么问题了。

  7. 最好在程序退出时释放内存,虽然OS会回收,但对于我们以后内存泄漏检测工作能带来极大方便。
  8. 一个类的指针被向上引用,作为基类的指针来使用的时候,把析构函数写成虚函数。这样做是为了当用一个基类的指针类型来删除一个派生类的对象时,派生类的析构函数会被调用。(new子类的对象,删除时却采用delete父类类型的指针。new CConcreteClass的对象ptr,但delete CClass类型的指针ptr,无法调用正确的析构函数)

  在QT中可以看到很多指针new后没有delete:

  参看博文《从 Qt 的 delete 说开来 》解释了为什么在示例工程中看到了很多new,而没有看见对应多的delete的原因。

转载于:https://www.cnblogs.com/galuo/p/4058791.html

搜索总结c++ 内存泄露问题相关推荐

  1. 使用valgrind检测ATS插件中的内存泄露

    一.内存错误出现的场景 这几天在重构ATS插件代码的过程中遇到了烦人的内存泄露问题, 周五周六连续两天通过走查代码的方法,未能看出明显的导致内存错误的代码, 同时也觉得C和C++混合编程得到一个动态库 ...

  2. 彻底搞懂Java内存泄露

    Java内存回收方式 Java判断对象是否可以回收使用的而是可达性分析算法. 在主流的商用程序语言中(Java和C#),都是使用可达性分析算法判断对象是否存活的.这个算法的基本思路就是通过一系列名为& ...

  3. umdh windbg分析内存泄露

    A.利用工具umdh(user-mode dump heap)分析 1设置gflags.exe标志 r Gflags标志设置好后,开启cmd 键入要定位内存泄露的程序gflags.exe /i mem ...

  4. kmemleak的使用---内存泄露检测工具【转】

    转自:http://blog.csdn.net/lishenglong666/article/details/8287783 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 内 ...

  5. log4cplus的内存泄露问题

    今天使用log4cplus在MFC调用时老发现关闭程序出现大面积的内存泄露.真操蛋,控制台没问题. 官方有人说是 微软工具检测的问题,并非内存泄露. 搜索一老外网页 http://stackoverf ...

  6. python 单例模式内存泄露_彻底搞懂Java内存泄露

    之前一直在简书写作,第一次发布到SF上来,也是第一次使用SF,后面会尽量同步到SF,更多文章请关注: 简书 编程之乐 转载请注明出处:谢谢! Java内存回收方式 Java判断对象是否可以回收使用的而 ...

  7. 弱引用什么时候被回收_ThreadLocal的内存泄露?什么原因?如何避免?

    前言 在分析ThreadLocal导致的内存泄露前,需要普及了解一下内存泄露.强引用与弱引用以及GC回收机制,这样才能更好的分析为什么ThreadLocal会导致内存泄露呢?更重要的是知道该如何避免这 ...

  8. java thread 内存泄露_Java ThreadLocal 内存泄露问题分析及解决方法。

    前言 在分析ThreadLocal导致的内存泄露前,需要普及了解一下内存泄露.强引用与弱引用以及GC回收机制,这样才能更好的分析为什么ThreadLocal会导致内存泄露呢?更重要的是知道该如何避免这 ...

  9. DebugDiagx检测内存泄露

    1. 安装DebugDiagx63.exe 2. 运行需要测试的程序UnitTest.exe. 3. 打开DebugDiag1.2, 选择 "Native (non-.Net) Memory ...

最新文章

  1. mysql5.5.9_mysql5.5.9字符集设置
  2. 三星i8150 刷机
  3. iOS开发--使用OpenSSL生成私钥和公钥的方法
  4. iframe高度宽度自适应(转)
  5. Linux学习之CentOS(八)--Linux系统的分区概念
  6. 使用sqlserver日期函数获取当前日期
  7. python是不是高级语言_Python是什么语言?老男孩教育带你了解!
  8. Linux用户、权限及改变文件所有者及文件所属组多例详解 附python代码
  9. 942.ava.com_如何使用Ava.js测试Node.js应用程序
  10. 1流明等于多少lux_要想投影仪画质清晰,投影仪流明和对比度不得不看
  11. 第五章 字符串字面量---一个特殊的数组
  12. Helm安装和项目使用
  13. 分析“关于Linux内核引入的accept_local参数的一个问题”
  14. 屏幕取词编程学习总结
  15. pr如何处理音效_在pr中怎么让声音变的好听?pr怎么让说话的声音更好听?
  16. 使用 Flash 描述复杂的社交网络
  17. 科目二倒车入库学车技巧_学车必看_保过。
  18. 行业分析-全球与中国无线键盘和蓝牙耳机市场现状及未来发展趋势
  19. 客户端dmesg_查看dmesg,会打出很多的日志“TCP: too many of orphaned sockets”
  20. 模型预测控制(MPC)解析(七):约束控制问题的表述

热门文章

  1. UNetbootin | 轻松制作Linux/BSD安装引导U盘
  2. 数学之美-隐含马尔可夫模型-笔记
  3. 论文密级_2019年毕业研究生论文提交的通知
  4. 插入始终是1_插入式电磁流量计的安装说明
  5. GeoTools——shp转geojson
  6. Managed I/O Completion Ports (IOCP)
  7. GameJS——Game Library written in JavaScript
  8. Zookeeper集群部署及报错分析
  9. 计算机网络课程设计即时通讯,计算机网络课程设计报告-基于LAN的即时通信软件.doc...
  10. vs2019建立web工程_自动化工程师的C#之路(1)