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);
还有泄露,晕,再找吧。