文档库 最新最全的文档下载
当前位置:文档库 › C语言中的内存泄漏原因及对策分析

C语言中的内存泄漏原因及对策分析

龙源期刊网 https://www.wendangku.net/doc/065051159.html,

C语言中的内存泄漏原因及对策分析

作者:李建辉

来源:《中国新通信》2015年第05期

在C语言程序设计中,内存泄漏几乎是很难避免的,C程序产生泄漏内存,则运行速度会逐渐变慢,并最终停止运行;如果产生覆盖内存,程序会变得非常脆弱,很容易受到恶意用户的攻击。内存泄漏是一种隐性危害,它们很难被发现,通常不能在相应的源代码中找到错误,需要仔细分析与专门的检测工具才能发现。

一、内存泄漏的定义

通常我们所说的内存泄漏,是指分配出去的内存在使用之后没有释放掉,没有回收,长此以往,会造成没有足够的内存可以分配。一般表现为运行时间越长,占用的内存越多,最终导致系统奔溃。一般的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显式释放的内存。应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free 或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。

二、内存泄漏原因分析

2.1 C语言内存分配情况

在C语言中,根据数据在内存中存在的时间(生存周期)不同,将内存空间分为三个区:1)程序区:用于存储程序的代码,即程序的二进制代码。2)静态存储区:用于存储全局变量和静态变量,这些变量的空间在程序编译时就已经分配好了。3)动态存储区:用于在程序执行时分配的内存,又分为:堆区(heap)和栈区(stack)。堆区:用于动态内存分配,程序运行时由内存分配函数在堆上分配内存。在C语言中,只能使用指针才能动态的分配内存。栈区:在函数执行时,函数内部的局部变量和函数参数的存储单元的内存区域,函数运行结束时,这些内存区域会自动释放。

2.2 C语言动态内存分配

在C语言中用内存分配函数来实现内存的动态分配,这些函数有:malloc()和realloc ()等函数。malloc():使用这个函数时需要包含头文件。使用该函数需要指定要分配的内存字节数作为参数,例如:

int *pNumber=(int *) malloc(100)

相关文档
相关文档 最新文档