【问题标题】:XERCESC 2.7 Memory Leak ProblemXERCESC 2.7 内存泄漏问题
【发布时间】:2011-06-16 09:47:09
【问题描述】:

我们正在使用 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();

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复,我实际上调用了 ->release() 但在此之前我多次重复使用 pDOMBuilder。这是内存的问题吗?我应该在每次需要之前重新初始化 DOMBuilder 吗?我会假设 DOMBuilder 不会保留比它自己的结构更多的内存。也许我错了,告诉我。谢谢。
    • 简短回答 - 不知道。尝试每次发布并创建一个新的,看看是否消除了内存泄漏。 their site 上有一些关于 Xerces C++ 和内存使用的注释。
    猜你喜欢
    • 1970-01-01
    • 2016-07-28
    相关资源
    最近更新 更多