Thanks ---- that indeed does the trick.

-----Original Message-----
From: Alberto Massari [mailto:[EMAIL PROTECTED] 
Sent: Friday, January 11, 2008 10:11 AM
To: Kong Posh Bhat
Cc: [email protected]
Subject: Re: Transferring nodes from one DOM tree to another -----
possible?

Because the destructor for CreateCoreDump is invoked after the "return 
0;" statement, you are indeed invoking it after Terminate.
Change your code to have an extra logical block to force the destructor 
to be invoked before Terminate, like in

  // Initialize the XML4C2 system
  try
  {
      XMLPlatformUtils::Initialize();
  }
  catch(const XMLException &toCatch)
  {
      XERCES_STD_QUALIFIER cerr << "Error during Xerces-c
Initialization.\n"
            << "  Exception message:"
           << XMLString::transcode(toCatch.getMessage()) <<
XERCES_STD_QUALIFIER endl;
      return 1;
  }

{ // <------------------

  CreateCoreDump ccd(argV[1]);

} // <------------------


  // Call the termination method
  XMLPlatformUtils::Terminate();


Alberto

Kong Posh Bhat wrote:
>> -----Original Message-----
>> From: Alberto Massari [mailto:[EMAIL PROTECTED] 
>> Sent: Friday, January 11, 2008 3:20 AM
>> To: Kong Posh Bhat
>> Cc: [email protected]
>> Subject: Re: Transferring nodes from one DOM tree to another -----
>>     
> possible?
>   
>> In this case I need to have a look at the full source....
>>
>> Alberto
>>
>> P.S. Please keep [email protected] in the CC list
>>     
>
> Hi,
>
> I have been able to reproduce the problem with a dummy class (that I
> have named CreateCoreDump).  The listing for the class is provided
> below.
>
> In this class I am dynamically allocating an instance of the
> XercesDOMParser class.  If I try to delete this in the destructor,
core
> dump ensues.
>
> Here are the details of my execution environment:
>       - gcc version 3.3.1
>       - Linux 2.4.20-31.9smp #1 SMP
>
>
>
> //////// Source code begin ////////////////
> #include <iostream>
> #include <stdexcept>
> #include <string>
>
> #include "xercesc/parsers/XercesDOMParser.hpp"
>
> using namespace std;
> XERCES_CPP_NAMESPACE_USE
>
> #define DST_BLOCK_SIZE 8192
>
> //---------------------------------------------------
> //
> //---------------------------------------------------
> class CreateCoreDump
> {
> public:
>   CreateCoreDump(const string& inputXMLFileName) throw (bad_alloc)
>   {
>     m_parser = new XercesDOMParser;
>
>     try
>     {
>       m_parser->parse(inputXMLFileName.c_str());
>     }
>     catch(...)
>     {
> #ifdef DEBUG
>       cerr << "Error in parsing file " << inputXMLFileName << " ---
> issuing exception\n";
>       delete m_parser;
>       m_parser = NULL;
>
>       throw bad_alloc();
>  #endif // DEBUG
>     }
>
>     DOMDocument* domPtr = m_parser->adoptDocument();
>     //
>     // Do something useful here
>     //
>   }
>
>   virtual ~CreateCoreDump()
>   {
>     if(m_parser)
>       delete m_parser;   // This is the statement that causes the core
> dump
>   }
>   
> protected:
>
>   XercesDOMParser*    m_parser;
> };
>
>
> //
>
------------------------------------------------------------------------
> ---
> //
> //  main
> //
> //
>
------------------------------------------------------------------------
> ---
> int main(int argC, char* argV[])
> {
>   // Check command line arguments.
>   if (argC < 2)
>   {
>       cout << "usage: " << argV[1] << " <input XML file>\n";;
>       XMLPlatformUtils::Terminate();
>       return 1;
>   }
>
>   // Initialize the XML4C2 system
>   try
>   {
>       XMLPlatformUtils::Initialize();
>   }
>   catch(const XMLException &toCatch)
>   {
>       XERCES_STD_QUALIFIER cerr << "Error during Xerces-c
> Initialization.\n"
>             << "  Exception message:"
>            << XMLString::transcode(toCatch.getMessage()) <<
> XERCES_STD_QUALIFIER endl;
>       return 1;
>   }
>
>   CreateCoreDump ccd(argV[1]);
>
>   // Call the termination method
>   XMLPlatformUtils::Terminate();
>
>   return 0;
> }
>
> //////// Source code end ////////////////
>
>
>
>
>
>
>
>   


Reply via email to