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

原文地址:https://www.cnblogs.com/liushui-sky/p/13917904.html