1
我們正在使用XERCESC 2.7,遺憾的是,網絡上沒有太多有關此主題的內容。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();
感謝您的迴應,我實際上調用了 - > release(),但在此之前我重複使用了pDOMBuilder多次。這是內存問題嗎?在我需要之前,我應該每次重新初始化DOMBuilder嗎?我認爲DOMBuilder不會保留比自己的結構更多的內存。也許我錯了,告訴我。謝謝。 – Oliver 2011-02-08 06:39:50