2011-01-27 22 views
1

XERCESC 2.7を使用しています。残念ながら、このトピックについてはあまりWeb上にはありません。XERCESC 2.7メモリリークの問題

質問:Xercesで解析する際のワークフローとは何ですか?私は私が持っているワークフローを見せてくれるだろうし、うまくいけば私のメモリリークは誰かが気付くだろう。残念ながら私は制限のためにシステムにメモリデバッガをインストールすることはできません。

おかげOS

コンストラクタ:

DOMBuilder * pDOMBuilder 

pDOMBuilder =_pDOMImplementation->createDOMBuilder 
(xercesc::DOMImplementationLS::MODE_SYNCHRONOUS, NULL); 
     pDOMBuilder->setFeature(XMLUni::fgXercesUserAdoptsDOMDocument, true) 
     pDOMBuilder->setFeature(xercesc::XMLUni::fgDOMNamespaces, true); 
     pDOMBuilder->setFeature(xercesc::XMLUni::fgDOMValidation, true); 
     pDOMBuilder->setFeature(xercesc::XMLUni::fgXercesSchema, true); 
     pDOMBuilder->setFeature(xercesc::XMLUni::fgXercesSchemaFullChecking, true); 
     pDOMBuilder->setFeature(xercesc::XMLUni::fgXercesValidationErrorAsFatal, true); 
     pDOMBuilder->setFeature(xercesc::XMLUni::fgDOMWhitespaceInElementContent, false); 
     pDOMBuilder->setFeature(xercesc::XMLUni::fgDOMDatatypeNormalization, true); 
     m_pErrorHandler = new ErrorHandler(); 
     pDOMBuilder->setErrorHandler(m_pErrorHandler); 
     pDOMBuilder->setEntityResolver(new EntityResolver(absolutePathToSchemas)); 

デストラクタ:オブジェクトの

pDOMWriter->release(); 

用途:

pDOMBuilder->resetDocumentPool(); 
pDOMBuilder->resetCachedGrammarPool(); 
m_ErrorHandler->reset(); 

xercesc::MemBufInputSource * pMemBufInputSource = new xercesc::MemBufInputSource((const XMLByte *)xmlStream, 
                         (unsigned int)strlen(xmlStream), 
                         UnicodeString("xmlStream")); 

xercesc::Wrapper4InputSource wrapper4InputSource(pMemBufInputSource); 
xercesc::DOMDocument * resultDoc = m_DOMBuilder->parse(wrapper4InputSource); 


resultDoc->release(); 

答えて

0

createXXXメソッドで取得したXerces DOMオブジェクトptrは、releaseメソッドを呼び出すことで解放する必要があります。 pDOMBuilder->release()に電話していないようです。

+0

本当にありがとうございます。私は実際にはrelease()を呼び出していますが、その前に複数回pDOMBuilderを再利用しています。これはメモリの問題ですか?私はDOMBuilderを毎回再初期化する必要がありますか?私は、DOMBuilderがそれ自身の構造よりも多くのメモリを保持しないと仮定します。たぶん私は間違っている、教えてください。ありがとうございました。 – Oliver

+0

短い答え - 分かりません。毎回新しいものをリリースして作成し、それがメモリリークを排除するかどうかを確認してください。 [自分のサイト](http://xerces.apache.org/xerces-c/program-dom-3.html#DOMMemMgmt)にXerces C++とメモリ使用に関するいくつかの注意があります。 –

関連する問題