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]

Reply via email to