C++使用tinyxml解析Xml内存泄漏问题
项目中需要用到C++解析XML,搜索使用tinyxml这么个开源库。在创建对象后内部自带Clear方法,但Clear只会清除其子节点,而自己本身不会释放,所以需要使用delete释放。代码如下:
#include <iostream> #include "tinyxml.h" #include "tinystr.h" #include <string> using namespace std; // 创建xml文件 int CreateXmlFile1(const char *szFileName) { int ret = 0; // 创建一个文档对象 TiXmlDocument *myDocument = new TiXmlDocument(); // 创建一个根元素并连接 TiXmlElement *root = new TiXmlElement("root"); myDocument->LinkEndChild(root); // 创建in节点并链接到root内 TiXmlElement *in = new TiXmlElement("in"); in->SetAttribute("ID", 1); root->LinkEndChild(in); // TiXmlElement *CardID = new TiXmlElement("Name"); CardID->SetValue("123213"); in->LinkEndChild(CardID); myDocument->SaveFile(szFileName); myDocument->Clear(); // 只是清除子节点 delete myDocument;// 释放自己 return ret; } void main() { while (true) { CreateXmlFile1("file.xml"); } system("pause"); }
当然其实tinyxml内部是有ClearThis方法的,不过有protected标签,所以解决该问题也可以在Clear方法内调用ClearThis方法,或者把ClearThis设为Public,如非必要,不建议修改第三方库源码。
参考:
https://www.cnblogs.com/yaoh/p/4147315.html
https://blog.csdn.net/mercy_ps/article/details/81346982
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步