Я храню const char *, возвращенный из следующей функции tinyxml2:
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
Может ли кто-нибудь сказать мне, почему данные, на которые указывает const char *, возвращаемая GetStr (), будут повреждены?
Взгляд на источник показывает, что он возвращает указатель на ваши данные XML.
Убедитесь, что вы храните данные XML в памяти до тех пор, пока не закончите их обработку, или скопируйте нужные строки перед удалением данных XML.
Других решений пока нет …