内存泄露,这是一个老生常谈的问题,因为即便是经验丰富的老手也能遇到这种问题。
通常情况下,我们所说的内存泄露一般是指堆区的内存,正是由于堆空间的特点,有足够的灵活空间,需要手动创建也需要手动释放,这就造成人们常常忘记释放内存,对应于代码就是C语言中的malloc/free、C++中的new/delete,以C语言为例,对于一些需要灵活控制的内存,当我们用malloc创建之后,我们可以顺利的使用这块空间,但常常忘记应该不用的时候及时释放掉这块空间,停止对这块内存的占用,否则这块内存将永远得不到释放,直到程序退出结束,这就是所谓的内存泄露
对于很多初学的同学,其实稍加注意就可以避免这种简单的内存泄露的问题发生,但是,通常情况下,实际遇到的内存泄露则没有这么简单,举个例子,当我们在写一个监控系统的时候,由于该程序需要长时间运行的特点,当某段代码未及时释放内存,可能仅仅泄露几个字节空间,但是当7*24小时的不间断运行后,再大的内存空间也会被耗光导致程序崩溃的。由于工程的代码量通常不小,这种问题的解决更加能以复现,给debug也增加了巨大的成本,因此需要足够小心,及时规避问题
下面大家看一个简化的内存泄露代码:
#include<stdio.h> #define N 10000 int fun() { char *p; p=malloc(100); return 0; } int main() { int i=0; for(i=0;i<N;i++) { fun(); } return 0; }
大家可以通过更改N的值来观察程序的运行情况
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程