G
Guest
In the code below I am trying to read text in an xml file, this works
fine but creates a memory leak of about 400K each time. This code is
called from a loop in a windows service so I can not just terminate the
app to cleanup, any ideas how to free this memory.
////////////////////////
xercesc_2_4::XercesDOMParser* parser = new
xercesc_2_4::XercesDOMParser();
parser->setValidationScheme(xercesc_2_4::XercesDOMParser::Val_Never);
parser->setDoNamespaces(false);
xercesc_2_4::ErrorHandler* errHandler = (xercesc_2_4::ErrorHandler*)
new xercesc_2_4::HandlerBase();
parser->setErrorHandler(errHandler);
string metaDataFile = GetMetadataFileName(submissionID);
try
{
parser->parse(metaDataFile.c_str());
}
catch (const xercesc_2_4::XMLException& toCatch)
{
char* message =
xercesc_2_4::XMLString::transcode(toCatch.getMessage());
std::cout << "Exception message is: \n" << message << "\n";
xercesc_2_4::XMLString::release(&message);
delete parser;
delete errHandler;
}
catch (const xercesc_2_4:
OMException& toCatch)
{
char* message = xercesc_2_4::XMLString::transcode(toCatch.msg);
std::cout << "Exception message is: \n" << message << "\n";
xercesc_2_4::XMLString::release(&message);
delete parser;
delete errHandler;
}
catch (...)
{
std::cout << "Unexpected Exception \n";
delete parser;
delete errHandler;
}
xercesc_2_4:
OMDocument* xmlDoc = parser->getDocument();
if( NULL == xmlDoc )
{
std::cout<<"xml doc is null, quit\n";
delete parser;
delete errHandler;
}
xercesc:
OMNodeList* list;
xercesc:
OMNode* node;
const XMLCh* n;
char* xmlval = "";
string szXmlVal = "";
list = xmlDoc->getElementsByTagName(
XMLString::transcode("SubmissionDate") );
node = list->item(0);
if( xercesc:
OMNode::ELEMENT_NODE == node->getNodeType() )
{
n = node->getFirstChild()->getNodeValue();
xmlval = xercesc_2_4::XMLString::transcode(n);
szXmlVal = xmlval;
xercesc_2_4::XMLString::release(&xmlval);
}
delete parser;
delete errHandler;
return szXmlVal;
/////////
Enda Mannion
fine but creates a memory leak of about 400K each time. This code is
called from a loop in a windows service so I can not just terminate the
app to cleanup, any ideas how to free this memory.
////////////////////////
xercesc_2_4::XercesDOMParser* parser = new
xercesc_2_4::XercesDOMParser();
parser->setValidationScheme(xercesc_2_4::XercesDOMParser::Val_Never);
parser->setDoNamespaces(false);
xercesc_2_4::ErrorHandler* errHandler = (xercesc_2_4::ErrorHandler*)
new xercesc_2_4::HandlerBase();
parser->setErrorHandler(errHandler);
string metaDataFile = GetMetadataFileName(submissionID);
try
{
parser->parse(metaDataFile.c_str());
}
catch (const xercesc_2_4::XMLException& toCatch)
{
char* message =
xercesc_2_4::XMLString::transcode(toCatch.getMessage());
std::cout << "Exception message is: \n" << message << "\n";
xercesc_2_4::XMLString::release(&message);
delete parser;
delete errHandler;
}
catch (const xercesc_2_4:
{
char* message = xercesc_2_4::XMLString::transcode(toCatch.msg);
std::cout << "Exception message is: \n" << message << "\n";
xercesc_2_4::XMLString::release(&message);
delete parser;
delete errHandler;
}
catch (...)
{
std::cout << "Unexpected Exception \n";
delete parser;
delete errHandler;
}
xercesc_2_4:
if( NULL == xmlDoc )
{
std::cout<<"xml doc is null, quit\n";
delete parser;
delete errHandler;
}
xercesc:
xercesc:
const XMLCh* n;
char* xmlval = "";
string szXmlVal = "";
list = xmlDoc->getElementsByTagName(
XMLString::transcode("SubmissionDate") );
node = list->item(0);
if( xercesc:
{
n = node->getFirstChild()->getNodeValue();
xmlval = xercesc_2_4::XMLString::transcode(n);
szXmlVal = xmlval;
xercesc_2_4::XMLString::release(&xmlval);
}
delete parser;
delete errHandler;
return szXmlVal;
/////////
Enda Mannion