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 ////////////////
>
>
>
>
>
>
>
>