2011-01-27 92 views
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(); 

回答

0

任何通過createXXX方法獲取的Xerces DOM對象ptr都應該通過調用release方法來釋放。您似乎沒有撥打pDOMBuilder->release()

+0

感謝您的迴應,我實際上調用了 - > release(),但在此之前我重複使用了pDOMBuilder多次。這是內存問題嗎?在我需要之前,我應該每次重新初始化DOMBuilder嗎?我認爲DOMBuilder不會保留比自己的結構更多的內存。也許我錯了,告訴我。謝謝。 – Oliver 2011-02-08 06:39:50