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]