我有這個類:與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;
然而,我的結果是奇怪的事情列表!如果我在addNode
函數中輸入wrapper.getXmlString()
,結果就okie!那麼我的問題是什麼?
編輯: 如果我在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'語句呢?此外,對於節點名稱的粘貼,你應該使用'allocate_string'。閱讀文檔。 – dirkgently
我只是擔心內存泄漏!這是正確的嗎? –
您使用可變數組'_name'的原始代碼會導致懸掛指針的問題(當您離開函數時,'_name'將被銷燬,您的XML文檔將指向已被銷燬的內存區域。 – dirkgently