`
suoyihen
  • 浏览: 1387954 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
今天在用rapidxml生成xml的时候碰到了一个奇怪的问题


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

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

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

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

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

分享到:
评论

相关推荐

    rapidxml实现xml文件的更改

    首先,Rapidxml库的特点在于其高效的内存管理策略,它避免了动态内存分配带来的性能开销。这使得它在处理大量XML数据时能保持较高的速度。在VS2015环境下,我们可以轻松地将Rapidxml集成到项目中,通过包含头文件并...

    rapidxml源代码

    1. **内存管理**:rapidxml不使用动态分配,而是使用预分配的内存池来存储XML节点和属性。这种方法减少了内存碎片,提高了效率。 2. **解析速度**:由于rapidxml不依赖于标准库,它能直接操作原始XML字符流,跳过...

    rapidxml的文件

    RapidXML的一个显著特点是它的解析速度非常快,因为它避免了内存分配和拷贝,直接在内存中操作原始XML字符流。这使得它适合于内存有限的环境或性能要求高的应用。 在实际开发中,你可以使用RapidXML来读取配置文件...

    rapidxml-1.13 的应用和示例

    - **内存池**:通过内存池管理解析过程中创建的小对象,减少内存分配和释放的开销。 - **零拷贝**:解析过程中尽可能减少数据复制,提高效率。 ### 2. 快速开始 要使用 RapidXML,首先需要包含头文件 `rapidxml....

    rapidxml源文件

    它避免了动态内存分配,通过内存池管理XML节点,这样减少了内存碎片和频繁的内存操作。此外,RapidXml不依赖STL,这使得它在某些特定环境下(比如嵌入式系统)更具优势。 总的来说,RapidXml是一个强大且实用的XML...

    rapidxml示例程序

    1. **内存效率**:rapidxml不依赖于STL,避免了内存分配和释放的开销。它使用预分配的内存池来存储XML节点和文本,提高了性能。 2. **解析速度**:由于其内部机制,rapidxml能够快速解析XML文档,减少了不必要的内存...

    rapidxml for vc6

    2. **非递归解析**:不同于许多其他XML解析器采用递归解析,rapidxml使用迭代器实现非递归解析,避免了深度递归可能导致的栈溢出问题。 3. **C++模板实现**:rapidxml利用C++模板元编程技术,实现了对XML结构的直接...

    rapidxml读写例子

    在MFC中使用rapidxml,需要将rapidxml的头文件和源代码集成到项目中,并确保与MFC的内存管理机制兼容。 4. **XML文件读取**:使用rapidxml解析XML文件时,首先需要创建一个解析器对象,然后通过`parse()`函数加载...

    rapidxml.zip

    1. **内存效率**:RapidXML设计时考虑了内存效率,它避免了创建大量临时对象,通过原地解析XML文档,减少了内存分配和拷贝操作,从而提升了性能。 2. **非DOM解析**:与DOM(Document Object Model)解析方式不同,...

    RapidXml操作集合

    2. **内存效率**:它避免了动态内存分配,通过预分配内存池来减少内存碎片。 3. **无外部依赖**:RapidXml仅依赖C++标准库,无需安装额外的库或运行时支持。 4. **源码小巧**:整个库的源代码只有几千行,易于阅读...

    c++生成与读取XML by rapidxml

    rapidxml是C++编写的一个轻量级、快速的XML解析器,它不依赖于任何外部库,且内存管理高效,特别适合嵌入式系统或对性能有高要求的应用。它提供了API来解析XML文档,并可以方便地创建和修改XML树结构。 **2. ...

    RapidXml读取并修改XML文件

    例如,`xml_node<>::append_child()`用于在指定节点后添加子节点,`xml_node<>::remove_child()`用于删除指定子节点,而`xml_node<>::value()`和`xml_node<>::set_value()`则可以用来获取和设置节点的值。...

    rapidxml资料.rar

    1. 使用内存池:为减少内存分配的开销,可以使用`rapidxml::memory_pool<>`来管理内存,批量预分配内存块。 2. 手动编码:对于已知的XML结构,可以手动编码解析过程,避免不必要的递归和节点遍历。 3. 验证选项:...

    rapidxml的使用测试

    rapidxml的设计理念是尽可能减少内存分配和拷贝操作,以提升解析效率。它通过在内存中构建一棵与XML文档结构相对应的树形结构,称为“节点树”。这种设计允许用户直接访问和修改XML数据,而无需通过复杂的查询和转换...

    rapidxml-1.13

    RapidXml 试图成为最快的 XML DOM 解析工具包,同时保证解析结果的可用性、可移植性以及与 W3C 标准的兼容性。RapidXml 使用 C++ 编写,因此在操作同一数据时,其解析速度接近于 strlen() 函数。 整个解析工具包包含...

    rapidxml源码文件

    例如,`rapidxml::parse_error` 类用于表示解析过程中遇到的错误,`rapidxml::memory_pool` 类提供了一种高效的内存管理机制,避免了频繁的内存分配和释放操作,从而提高了性能。 在实际使用Rapidxml时,首先需要...

    rapidxml 例子

    rapidxml 例子 http://blog.csdn.net/zerolxl/article/details/8246408

    rapidxml生成好的dll和安卓so文件

    Rapidxml的核心设计理念是避免动态内存分配,通过在栈上分配内存来提升性能。它提供了一套API,包括解析XML文档、访问节点、遍历树结构等,简化了XML处理流程。在Windows环境下,开发者可以使用Visual Studio或MinGW...

Global site tag (gtag.js) - Google Analytics