c语言知识回顾

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值