Я храню константный символ * возвращенное из следующего tinyxml2 функции:Const символ * член
const char* tinyxml2::XMLElement::Attribute (const char * name, const char * value = 0)
Однако, недавно я понял, что данные строки повреждается в течение долгого времени, возможно, после вызова Атрибут() несколько раз. Я собираюсь изменить const char * на std :: string, но я просто хочу узнать, почему это произошло.
Я пробовал посмотреть исходный код, но я не понимаю, почему это произойдет. Похоже, Attribute() вызывает Value(), который вызывает GetStr():
https://github.com/leethomason/tinyxml2/blob/master/tinyxml2.cpp
Может кто-нибудь сказать мне, почему данные указывает константным полукокса * возвращенного GetStr() будет повредиться?
Общая предпосылка: он считывает весь файл в буфер и анализирует его на месте, возвращая вам символ * в буфер. Если любой корневой объект tinyxml владеет буфером, он уничтожается, так что это буфер. То, что вы видите как коррупция, вероятно, просто освободило память, которая еще не полностью написана. – David