Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4982114
  • 博文数量: 1696
  • 博客积分: 10870
  • 博客等级: 上将
  • 技术积分: 18357
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-30 15:16
文章分类
文章存档

2017年(1)

2016年(1)

2015年(1)

2013年(1)

2012年(43)

2011年(17)

2010年(828)

2009年(568)

2008年(185)

2007年(51)

分类:

2010-07-25 21:27:43

作者:金鸽

欢迎访问 sinodragon21.cublog.cn



失败案例:中间的异常情况都调用了释放对内存的API,但最后正常退出前却没有调用

函数框架如下:

MiddleWare_INT function(in, out, ...)
{
    MiddleWare_CHAR *allocate_mem = MiddleWare_Malloc(1024*10);
    if (exceptionA)
    {
        MiddleWare_Free();
        allocate_mem = NULL;
        return MiddleWare_FAILURE;
    }
    if (exceptionA)
    {
        MiddleWare_Free();
        allocate_mem = NULL;
        return MiddleWare_FAILURE;
    }
    if (exceptionA)
    {
        MiddleWare_Free();
        allocate_mem = NULL;
        return MiddleWare_FAILURE;
    }

    ... ...

    // 上面的异常情况都释放了堆内存,唯独最后的正常退出忘记了释放,导致内存泄露。一次泄露10兆。

    return MiddleWare_SUCCESS;
}

规避方法:
1、代码Review
2、单元测试
3、内存泄露测试,多次运行业务流程,观察该进程消耗的内存量是否平稳,是否有所上升。
阅读(695) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~