内存泄漏和野指针

本文介绍了内存泄漏的概念、原因、检测方法,包括静态分析技术和源代码插装技术,并列举了一些常用的内存泄漏检测工具。接着讨论了C语言中的malloc和free以及C++中的new和delete。最后,探讨了野指针的定义、产生原因及规避方法,强调了初始化和释放后置空的重要性。
摘要由CSDN通过智能技术生成


本篇文章打算简单说一下有关内存泄漏和野指针的知识,感觉经常会在面试中遇到。下面来回顾一下这两个知识点。

内存泄漏

1、概念
内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。(此处参考了百度百科)

2、了解原因
例如服务器应用软件,需要长时间的运行,不断的处理由客户端发来的请求,如果没有有效的内存管理,每处理一次请求信息就有一定的内存泄漏。这样不仅影响到服务器的性能,还可能造成整个系统的崩溃。因此,内存管理成为软件设计开发人员在设计中考虑的主要方面 。

3、个人理解
与C中的malloc函数有关,malloc是一个动态分配内存的函数。当malloc分配了内存后,如果没有使用free函数及时释放掉分配的内存,就会造成内存泄漏。

3、检测方法
下面简单介绍几种检测方法,详细可以区看看百度百科,有很多种。
(1)静态分析技术
直接分析程序的源代码或机器代码,获得一些有用的信息,而并不运行程序本身。目前有许多静态分析的工具,编译器就属于这一类,它读入源程序代码,对源程序进行词法和语法分析,进行数据类型的检查以及一些优化的分析等,以此来提高程序的质量与运行效率。这类静态的分析工具仅仅是读入程序代码进行相关的分析,而并不进行其它额外的操作,如修改源程序代码等。

常用工具LCLink
LCLink重点分析两类内存释放错误:
试图释放某内存块,该内存块有两个或两个以上的有效指针指向它。
试图释放某内存块,该内存块没有任何有效指针指向它。

解决方法:解决此类内存错误的方法是规定分配某块内存时返回的指针必须释放该内存。

(2)源代码插装技术
为了获得被测程序的动态执行信息,需要对其进行跟踪,一般使用插装方法。所谓插装就是在保持被测程序的逻辑完整性的基础上,在被测程序的特定部位插入一段检测程序又称探针函数,通过探针的执行抛出程序的运行特征数据。(与printf打印类

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值