2012-06-11 4 views
0

을 append_node이상한 결과 내가이 클래스가

그러나
XmlWrapper wrapper; 
wrapper.addNode("message"); 
cout << wrapper.getXmlString() << endl; 

내 결과가 이상한 물건의 목록입니다! 내가 addNode 함수에서 wrapper.getXmlString() 인 경우 결과는 okie가됩니다! 내 문제가 뭐니?

편집 :

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; 

이 일이 일어날 이유 : 나는 다음과 같이 MAIN.CPP에 직접 사용 경우, 모든 일이 잘 갈입니까?

+0

당신은'new'를 사용하여 메모리를 할당하지 않습니다. 왜 당신은'delete root; '문장을 가지고 있는가? 또한, 노드 이름을 고수하기 위해서는'allocate_string'을 사용해야합니다. 설명서를 읽으십시오. – dirkgently

+0

메모리 누수가 걱정됩니다! 이게 옳은 거니? –

+1

가변 배열'_name'을 사용하는 원래 코드는 매달린 포인터에 문제를 일으킬 것입니다 (함수 밖으로 나갈 때'_name'은 파괴 될 것이고 XML 문서는 파괴 된 메모리 영역을 가리킬 것입니다). – dirkgently

답변

1

dirkgently는 - _name이 (가) 스택에 있으며 함수 범위를 벗어나면 파괴 될 것입니다. allocate_string을 사용하거나 자신 만의 가비지 콜렉션을 작성할 수 있습니다.

+0

가장 쉬운 가비지 수집은 벡터 멤버를 XmlWrapper에 추가하고 push_back 문자열을 add_node()에 추가합니다. – ModdyFire