Hi I have a memory leak in this function, can anyone see where? Do I
need to release const XMLCh* n; at the bottom, how do I do this.

////////////////////////////////////////////////////////////////////////
///
{
        xercesc::XercesDOMParser* parser = new
xercesc::XercesDOMParser();
        if(parser == NULL)
        {
                return "";
        }

        
parser->setValidationScheme(xercesc::XercesDOMParser::Val_Never);    //
optional.
        parser->setDoNamespaces(false);    // optional

        xercesc::ErrorHandler* errHandler = (xercesc::ErrorHandler*) new
xercesc::HandlerBase();
        parser->setErrorHandler(errHandler);

        string metaDataFile = GetMetadataFileName(submissionID);

        try 
        {
                // path to metadata file
                parser->parse(metaDataFile.c_str());
        }

        catch (const xercesc::XMLException& toCatch) 
        {
                char* message =
xercesc::XMLString::transcode(toCatch.getMessage());
                std::cout << "Exception message is: \n" << message <<
"\n";
                LOGERROR("Exception message is: " << message);
                xercesc::XMLString::release(&message);

                delete parser;
                delete errHandler;
                return "";
        }

        catch (const xercesc::DOMException& toCatch) 
        {
                char* message =
xercesc::XMLString::transcode(toCatch.msg);
                std::cout << "Exception message is: \n" << message <<
"\n";
                LOGERROR("Exception message is: " << message);
                xercesc::XMLString::release(&message);

                delete parser;
                delete errHandler;
                return "";
        }

        catch (...) 
        {
                std::cout << "Unexpected Exception \n";

                LOGERROR("Metadata::ReadMetaDataState xercesc (...)
Exception");
                delete parser;
                delete errHandler;
                return "";
        }

        xercesc::DOMDocument* xmlDoc = parser->getDocument();
        
        if( NULL == xmlDoc )
        {
                std::cout<<"xml doc is null, quit\n";
                delete parser;
                delete errHandler;
                return "";
        }

        xercesc::DOMNode* docNode = xmlDoc->getDocumentElement();
        
        if( NULL == docNode )
        {
                std::cout<<"doc is null, quit\n";
                delete parser;
                delete errHandler;
                return "";
        }

        xercesc::DOMNodeList* list;
        xercesc::DOMNode* node;
        const XMLCh* n;
        char* xmlval = "";
        string szXmlVal = "";


list = xmlDoc->getElementsByTagName( XMLString::transcode(szTag.c_str())
);
        node = list->item(0);
        if( xercesc::DOMNode::ELEMENT_NODE == node->getNodeType() )
        {
                n = node->getFirstChild()->getNodeValue();
                xmlval = xercesc::XMLString::transcode(n);
                szXmlVal = xmlval;
                xercesc::XMLString::release(&xmlval);           
                xercesc::XMLString::release(n);
        }


        delete parser;
        delete [] xmlval;
        delete errHandler;
        return szXmlVal;

}
////////////////////////////////////////////////////////////////////////
///




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to