【发布时间】:2013-03-10 04:33:44
【问题描述】:
我正在存储从以下 tinyxml2 函数返回的 const char*:
const char* tinyxml2::XMLElement::Attribute (const char * name, const char * value = 0)
但是,我最近意识到字符串数据会随着时间的推移而损坏,可能是在多次调用 Attribute() 之后。我打算将 const char* 更改为 std::string 但我只想了解为什么会发生这种情况。
我尝试查看源代码,但我不明白为什么会发生这种情况。看起来 Attribute() 调用了 Value(),而后者又调用了 GetStr():
https://github.com/leethomason/tinyxml2/blob/master/tinyxml2.cpp
谁能告诉我为什么 GetStr() 返回的 const char* 指向的数据会损坏?
【问题讨论】:
-
总推测:它将整个文件读入缓冲区并就地解析它,将 char* 返回到缓冲区中。如果任何根 tinyxml 对象拥有缓冲区,那么缓冲区也会被销毁。您所看到的损坏可能只是尚未完全覆盖的已释放内存。