c++ - XERCESC 2.7 内存泄漏问题

标签 c++ xml memory-leaks xml-parsing xerces

不幸的是,我们使用的是 XERCESC 2.7,网络上关于此主题的信息不多。

问题:使用 Xerces 解析时的工作流程是什么?我将展示我的工作流程,希望有人能发现我的内存泄漏。不幸的是,由于限制,我无法在系统上安装内存调试器。

感谢操作系统

构造函数:

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();

最佳答案

任何通过 createXXX 方法获取的 Xerces DOM 对象 ptr 都应该通过调用它的 release 方法来释放。您似乎没有调用 pDOMBuilder->release ()

关于c++ - XERCESC 2.7 内存泄漏问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4814357/

相关文章:

c++ - 用 C++ 解决数独难题

c++ - 将文件读入 std::string 的最有效方法是什么?

java - 创建的方法,在返回其中的变量时遇到问题

将节点添加到根节点时出现 java.lang.NullPointerException

c++ - 释放内存时出错

c++ - 如何将 t[i][j] 转换为指针样式引用

c++ - 如何将二进制数据文件中的信息读入结构数组 C++

android - 无法创建选项卡内容,因为在 Android Eclipse 中找不到 ID 为 -1 的 View XML 错误?

ios - 为什么 "[[UIDevice currentDevice] identifierForVendor]"会导致内存泄漏?

java - Log4j2 - ServletContextListener 中的 ThreadLocal 内存泄漏