2011-01-27 85 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