2013-03-10 6 views
1

Я храню константный символ * возвращенное из следующего tinyxml2 функции:Const символ * член

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

Однако, недавно я понял, что данные строки повреждается в течение долгого времени, возможно, после вызова Атрибут() несколько раз. Я собираюсь изменить const char * на std :: string, но я просто хочу узнать, почему это произошло.

Я пробовал посмотреть исходный код, но я не понимаю, почему это произойдет. Похоже, Attribute() вызывает Value(), который вызывает GetStr():

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

Может кто-нибудь сказать мне, почему данные указывает константным полукокса * возвращенного GetStr() будет повредиться?

+0

Общая предпосылка: он считывает весь файл в буфер и анализирует его на месте, возвращая вам символ * в буфер. Если любой корневой объект tinyxml владеет буфером, он уничтожается, так что это буфер. То, что вы видите как коррупция, вероятно, просто освободило память, которая еще не полностью написана. – David

ответ

1

Взгляд на источник показывает, что он возвращает указатель на ваши данные XML. Убедитесь, что вы храните свои XML-данные в памяти до тех пор, пока не закончите ее обработку, или не скопируйте нужные вам строки перед удалением данных XML.

Смежные вопросы