首页  >  编程教程  >  编程问答  >  什么是内存泄露

什么是内存泄露

内存泄露,这是一个老生常谈的问题,因为即便是经验丰富的老手也能遇到这种问题。

通常情况下,我们所说的内存泄露一般是指堆区的内存,正是由于堆空间的特点,有足够的灵活空间,需要手动创建也需要手动释放,这就造成人们常常忘记释放内存,对应于代码就是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的值来观察程序的运行情况


本文固定URL:https://www.dotcpp.com/qa/15

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

编程杂谈
编程基础
知识答疑