1

残念ながら、XERCESC 2.7 を使用していますが、このトピックについては Web 上であまり取り上げられていません。

質問: 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();
4

1 に答える 1

0

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

于 2011-01-27T11:52:37.997 に答える