首页 > 编程语言 > 详细

C++使用tinyxml解析Xml内存泄漏问题

时间:2020-11-03 10:19:36      阅读:61      评论:0      收藏:0      [点我收藏+]

项目中需要用到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

 

C++使用tinyxml解析Xml内存泄漏问题

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!