0

私はこのクラスを持っています:

// 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;

しかし、私の結果は奇妙なもののリストです!! 関数でcout するとwrapper.getXmlString()、結果は okie になります。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;

なぜこのようなことが起こるのですか?

4

1 に答える 1

1

dirkgently が言ったこと - _name はスタック上にあり、関数のスコープから出ると破棄されます。allocate_string を使用するか、独自のガベージ コレクションを作成できます。

于 2012-06-12T04:53:39.240 に答える