У меня есть этот класс:Weird результат с rapidXml в C++ append_node
// XmlWrapper.h
class XmlWrapper{
private:
xml_document<> doc;
public:
XmlWrapper();
string addNode(string node_name);
string getXmlString();
};
// XmlWrapper.cpp
XmlWrapper::XmlWrapper(){};
XmlWrapper::addNode(string node_name){
char _name[name.size()+1];
strcpy(_name,name.c_str());
_name[name.size()] = '\0';
xml_node<> *root = doc.allocate_node(node_element,_name);
this->doc.append_node(root);
delete root;
return SUCCESS;
}
string XmlWrapper::getXmlString(){
string xmlString;
print(back_inserter(xmlString), this->doc, 0);
return xmlString;
}
И это мой main.cpp:
XmlWrapper wrapper;
wrapper.addNode("message");
cout << wrapper.getXmlString() << endl;
Однако мой результат список странных вещей !! если i cout wrapper.getXmlString()
в addNode
функция, результат будет ОК! Так в чем моя проблема?
Отредактировано: если я использовать непосредственно в main.cpp, как это ниже, каждая вещь идти прямо:
xml_document<> doc;
xml_node<> *message_node = doc.allocate_node(node_element, "message");
doc.append_node(message_node);
string buffer;
print(back_inserter(buffer),doc,0);
cout << buffer << endl;
Почему эта вещь произойдет?
Вы не используете 'new' для выделения памяти. Почему у вас есть инструкция 'delete root ?' then? Кроме того, для того, чтобы имена узлов были прикреплены, вы, вероятно, должны использовать 'allocate_string'. Прочтите документацию. – dirkgently
Я просто беспокоюсь о утечке памяти! Это правильно? –
Ваш исходный код, который использует вариационный массив '_name', вызовет проблемы с оборванным указателем (когда вы выйдете из функции,' _name' будет уничтожен, а ваш XML-документ укажет на область памяти, которая была уничтожена. – dirkgently