rapidxml添加属性的内存分配问题

 今天在用rapidxml生成xml的时候碰到了一个奇怪的问题
rapidxml::xml_node<>* srvnode = doc.allocate_node(rapidxml::node_element,iter->m_name.c_str(),"");
srvnode->append_attribute(doc.allocate_attribute("ip",iter->m_ip.c_str()));
srvnode->append_attribute(doc.allocate_attribute("ftpport",toString(iter->m_ftpport).c_str()));


生成的xml,其他地方都正常,就“ftpport”的属性总是显示乱码,开始以为是toString函数的问题,但是我换了一种转换方式后这个问题依然存在,同时我调试的时候看到的toString

的返回值也正常,最后和同时讨论后,他给我解释rapidxml的函数在创建新节点或者属性的时候,传入的参数要么是由内部分配器分配的内存要么应该指向一块短期内不会被释放的内存。

原来如此,于是我改了代码之后

rapidxml::xml_node<>* srvnode = doc.allocate_node(rapidxml::node_element,iter->m_name.c_str(),"");
srvnode->append_attribute(doc.allocate_attribute("ip",iter->m_ip.c_str()));

char* port = doc.allocate_string(toString(iter->m_ftpport).c_str());
srvnode->append_attribute(doc.allocate_attribute("ftpport",port));

乱码的问题果然消失了,原来allocate_attribute方法创建一个属性的时候,attribute的m_value指针只是简单的指向了一块内存地址,在后期将doc写入文件,会将attribute转化为字符串,如果此时m_value指向的地址内存被释放的话,那么就会出现我先的问题了。所以我的解决方案就是用rapidxml自己的内存池分配一块内存,保存m_value指向的值,这样就OK了。

写在这里纯粹是做个记录,希望对某些同志也有帮助!

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值