Hello David,

My problem is soloved perfectly.
Thank you very much for your kind advise.

----- Original Message ----- 
From: "David J Craigon" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, June 06, 2003 7:18 PM
Subject: Re: How to release memory


> Hello Hamada-san,
> XMLString::transcode produces a string which belongs to you, and you
> need to delete after use. So if you use something like:
> 
> DOMDocument* doc = impl->createDocument( XMLString::transcode("aaaaa" ),
> XMLString::transcode("bbbbb:ccccc"), NULL );
> 
> the two calls to XMLString::transcode leak memory, since they create a
> string which is passed to the function, but it is never deallocated.
> 
> In this case, it you can use delete[], but in line with other Xerces-C
> practise, you are better off using XMLString::release().
> 
> What you need is something like:
> #include <xercesc/dom/DOM.hpp>
> #include <xercesc/util/XMLString.hpp>
> #include <xercesc/dom/DOMImplementation.hpp>
> #include <xercesc/dom/DOMImplementationRegistry.hpp>
> #include <xercesc/util/PlatformUtils.hpp>
> 
> using namespace std;
> using namespace xercesc;
> 
> #define X(x) XMLString::transcode(x)
> 
> int main() {
>   for (int i=0;i<5000000;i++) {
>     XMLPlatformUtils::Initialize();
>     {
>       XMLCh *temp1;
>       XMLCh *temp2;
> 
>       temp1=X("");
>       DOMImplementation* impl =
> DOMImplementationRegistry::getDOMImplementation(temp1);
>       XMLString::release(&temp1);
> 
>       temp1=X("aaaaa" );
>       temp2=X("bbbbb:ccccc");
>       DOMDocument* doc = impl->createDocument( temp1,
>        temp2, 0);
>       XMLString::release(&temp1);
>       XMLString::release(&temp2);
> 
>       DOMElement* drugMLElement = doc->getDocumentElement();
> 
>       temp1=X("dddddd");
>       temp2=X("http://eeeee";);
>       drugMLElement->setAttribute( temp1,temp2);
>       XMLString::release(&temp1);
>       XMLString::release(&temp2);
>       doc->release();
> 
>     }
>     XMLPlatformUtils::Terminate();
>   }
>   return 1;
> }
> 
> This compiles for me without similar problems.
> 
> David
> 
> 
> Michiaki HAMADA / FUJI-RIC wrote:
> > Hello everyone.
> > 
> > By seeing unix "top" command,
> > I found out the thing that memories kept increasing 
> > in my sample program (which is mentioned in the end
> > of this mail). 
> > 
> > By the way I am using xerces-c++ verion 2.2.0 on 
> > Redhat Linux 7.3.
> > 
> > Where is wrong in my program ?
> >  
> > ------ sample program starts --------
> > 
> > #include <xercesc/dom/DOM.hpp>
> > #include <xercesc/util/XMLString.hpp>
> > #include <xercesc/dom/DOMImplementation.hpp>
> > #include <xercesc/dom/DOMImplementationRegistry.hpp>
> > #include <xercesc/util/PlatformUtils.hpp>
> > 
> > using namespace std;
> > using namespace xercesc;
> > 
> > #define X(x) XMLString::transcode(x)
> > 
> > int main() {
> >   for (int i=0;i<5000000;i++) {
> >     XMLPlatformUtils::Initialize();
> >     {
> >       DOMImplementation* impl =
> >  DOMImplementationRegistry::getDOMImplementation(X(""));
> >       DOMDocument* doc = impl->createDocument( X("aaaaa" ), 
> >             X("bbbbb:ccccc"), NULL );
> >       DOMElement* drugMLElement = doc->getDocumentElement();
> >       drugMLElement->setAttribute( X("dddddd"),
> >        X("http://eeeee";) );
> >       doc->release();
> > 
> >     }
> >     XMLPlatformUtils::Terminate();
> >   }
> >   return 1;
> > }
> > 
> > ------------
> > M. Hamada
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 

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

Reply via email to