zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    博客园主题故障记录及哔哩哔哩主题备份
    Cesium中的primitive竖立流光飞线
    PostgreSQL密码重置方法_WOLF
    软著代码整理技巧总结
    mapboxGL轨迹展示与播放_LZUGIS
    转载 博客园主题——Bili2.0
    为影像数据去除无效值_慕名ArcGIS
    CesiumJS如何自定义浮框
    Cesium中的primitive流光轨迹
    Cesium 地形采样点
  • 原文地址:https://www.cnblogs.com/liushui-sky/p/13917904.html
Copyright © 2011-2022 走看看