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