XERCESC 2.7 Проблема утечки памяти - PullRequest
1 голос
/ 27 января 2011

Мы используем 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();

1 Ответ

0 голосов
/ 27 января 2011

Все, что Ptr объекта DOM Xerces, полученный с помощью метода createXXX, должно быть освобождено путем вызова его метода release.Вы, кажется, не звоните pDOMBuilder->release ().

...