【问题标题】:const char* memberconst char* 成员
【发布时间】:2013-03-10 04:33:44
【问题描述】:

我正在存储从以下 tinyxml2 函数返回的 const char*:

const char* tinyxml2::XMLElement::Attribute (const char * name, const char * value = 0)

http://www.grinninglizard.com/tinyxml2docs/classtinyxml2_1_1_x_m_l_element.html#ae39be2f7677e470e0f76ccd73eea560c

但是,我最近意识到字符串数据会随着时间的推移而损坏,可能是在多次调用 Attribute() 之后。我打算将 const char* 更改为 std::string 但我只想了解为什么会发生这种情况。

我尝试查看源代码,但我不明白为什么会发生这种情况。看起来 Attribute() 调用了 Value(),而后者又调用了 GetStr():

https://github.com/leethomason/tinyxml2/blob/master/tinyxml2.cpp

谁能告诉我为什么 GetStr() 返回的 const char* 指向的数据会损坏?

【问题讨论】:

  • 总推测:它将整个文件读入缓冲区并就地解析它,将 char* 返回到缓冲区中。如果任何根 tinyxml 对象拥有缓冲区,那么缓冲区也会被销毁。您所看到的损坏可能只是尚未完全覆盖的已释放内存。

标签: c++ windows tinyxml


【解决方案1】:

查看源代码会发现它返回一个指向您的 XML 数据的指针。 确保在处理完 XML 数据之前将其保存在内存中,或者在删除 XML 数据之前复制所需的字符串。

【讨论】:

    猜你喜欢
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多