内存泄露排查

C++的工程,发现有内存泄露

  • 先是用valgrind跑了下
valgrind --tool=memcheck --leak-check=full --show-reachable=yes --log-file=mem.txt ./project

        查看生成的mem.txt,没看出什么问题。

  • 检查所有的malloc和new类的释放情况,完善所有路径的释放
  • 用了cJSON的代码,检查cJSON的释放情况,释放最外层的json对象,基本下面两种情况
cJSON* root = cJSON_CreateObject();
。。。
char* data = cJSON_Print(root);
std::string strData = data;
free(data);
data = 0;
cJSON_Delete(root);
cJSON* json = cJSON_Parse(strMsg.c_str());
。。。
cJSON_Delete(json);
  • 因为用了tinyxml,检查相关释放情况
TiXmlDocument* pReadDoc = new TiXmlDocument();
pReadDoc->Parse(strXml.c_str(), 0, TIXML_ENCODING_UTF8);
。。。
pReadDoc->Clear();
delete pReadDoc;
  • 因为是linux下跑的代码,发现linux有时候代码释放了,内存也没有真的释放掉,在释放大块内存的时候添加了释放内存的代码 ,用多了不知道影响性能不
#include <malloc.h>

#ifdef WIN32
#else
            malloc_trim(0);
#endif
  • 有的string比较大,用完后也释放掉
std::string().swap(strBase64);

还有泄露,晕,再找吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值