Hi Enda,

At 12:07 PM 6/1/2006 +0100, Mannion, Enda wrote:
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::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;

- you don't need to call xercesc::XMLString::release(n) as the node value is owned by the DOMNode; - you don't need to call delete [] xmlval as you already released it using xercesc::XMLString::release(&xmlval)
- what you need to do is to release the argument of getElementsByTagName
e.g.

XMLCh* tag=XMLString::transcode(szTag.c_str());
list = xmlDoc->getElementsByTagName( tag );
XMLString::release(&tag);

Alberto

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

Reply via email to