Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1756596
  • 博文数量: 198
  • 博客积分: 4088
  • 博客等级: 上校
  • 技术积分: 2391
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-15 16:29
个人简介

游戏开发,系统架构; 博客迁移到:http://www.jianshu.com/u/3ac0504b3b8c

文章分类

全部博文(198)

文章存档

2017年(1)

2016年(12)

2015年(1)

2014年(3)

2013年(13)

2012年(18)

2011年(150)

分类: LINUX

2011-09-20 12:06:21

  今天在对使用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.     while ( node )
  6.     {
  7.         temp = node;
  8.         node = node->next;
  9.         delete temp;
  10.     }    
  11. }
所以我的观点是以后在用tinyxml时,TixmlDocument最好在栈上创建,其子节点都应用new在堆上创建,否则在TixmlDocument析构的时候不会将子节点销毁
阅读(5402) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~