• tinyxml一些应注意的问题


     今天在对使用tinyxml库的程序调试的时候,出现的一些问题让人很纠结,特记以此...
    在对TixmlDocument创建时我是用new创建的,然后在用完之后我用delete释放掉,可是用gdb调试的时候出现double free,然后我注释掉了delete,调试通过。但是另一个问题又出现了,在另一函数中我Load相同的xml文件时出现malloc错误,就是LoadFile源码中 TIXML_STRING filename( _filename )出错了,这让我情何以堪,纠结了很长时间都没有遭到办法。
      出于对new TixmlDocument之后又不能delete的不适,我放弃了在堆上创建TixmlDocument的方法,改用在栈上创建TixmlDocument,其他的一些节点元素则还是用new创建。修改之后,调试通过。
      new出来的其他节点只要是连接到TixmlDocument,都不要手动销毁,因为在析构TixmlDocument的时候,其相应的子节点也是会被一起销毁的,其析构代码如下
     1 TiXmlNode::~TiXmlNode()
     2 {
     3     TiXmlNode* node = firstChild;
     4     TiXmlNode* temp = 0;
     5 
     6     while ( node )
     7     {
     8         temp = node;
     9         node = node->next;
    10         delete temp;
    11     }    
    12 }

    所以我的观点是以后在用tinyxml时,TixmlDocument最好在栈上创建,其子节点都应用new在堆上创建,否则在TixmlDocument析构的时候不会将子节点销毁

  • 相关阅读:
    模拟实现ajax加载框
    京东晒单的js实现
    微信分享js代码(转载)
    css模拟实现selec下拉框
    网页端实现输入卡号四字隔开
    返回顶部的动态显示与隐藏
    js等比例缩放图片(转载)
    css模拟实现checkbox
    quartz的使用 Mr
    Spring声明式事务配置管理方法 Mr
  • 原文地址:https://www.cnblogs.com/lpxblog/p/5644387.html
Copyright © 2020-2023  润新知