1.1内存泄露概念:
分配的动态内存,在使用完成后,没有被释放,导致该内存单元一直处于被占用状态,造成系统内存的浪费。
1.2内存泄露带来的影响、内存泄露场景以及解决方案:
影响:
1.使得程序卡顿
2.过多的内存泄露会导致程序崩溃
场景示例:(指针类型的变量在重新赋值前没有被释放):
int *a=(int *)malloc(sizeof(int)); //声明一个int型指针a,然后申请1个int型大小的区域(不一定是连续的区域,大部情况是链式区域),把这个内存区域的首地址赋值给指针变量a
int *b=(int *)malloc(sizeof(int)) ; //同上变量名是b
a=b ; //把b复制给a,
解释:执行上面三行代码,此时a指向的内存地址就是b所指向的内存地址,但是a原来指向的内存地址,因为没有被释放所以就导致了内存泄露。
解决办法:还是上述代码,只需要在给a重新赋值前加上free(a),这个时候是告诉操作系统这块内存可以重新被系统使用,但是值任然是存在的,还需要加一个a=NULL,这个是把指针指向空,这个时候a就没有指向了,这块内存就变成了最开始的样子,修改后为:
int *a=(int *)malloc(sizeof(int));
int *b=(int *)malloc(sizeof(int)) ;
a=NULL;
free(a);
a=b ;
详细可以看下这篇文章:http://c.biancheng.net/view/385.html
1.3内存检测工具
可以看下这篇文章:https://gitee.com/baidu/BRPC/blob/master/docs/cn/heap_profiler.md