You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by Jason Jesso <jj...@global-matrix.com> on 2002/02/13 22:44:56 UTC

memory leak

I have this program that enters an infinite loop.  It creates a parser
and parses the xml file.  I then delete the parser using delete.  And so
on, over and over again.

Looking at the SZ column from ps (on AIX4.3.3) this number keeps
increasing.  This suggests and memory leak or the parser resources are
getting released.  I am calling delete on the parser.

Can someone help?


int
main( int ac, char* av[] )
{
     DOMParser *parser;

     if ( ac != 2 ){
          cerr << "usage: " << av[0] << " xml file" << endl;
          return 1;
     }

     try
     {
          XMLPlatformUtils::Initialize();
     }
     catch( const XMLException& e )
     {
          cerr << "Error during initialization! :\n"
               << e.getMessage() << "\n";
          return 1;
     }

     for ( ;; ){
          parser = new DOMParser;
          parser->setValidationScheme(DOMParser::Val_Always);
          DOMTreeErrorReporter *errReporter = new
DOMTreeErrorReporter();
          parser->setErrorHandler(errReporter);

          //
          //  Parse the XML file, catching any XML exceptions that might
propogate
          //  out of it.
          //
          bool errorsOccured = false;

          try
          {
               parser->parse( av[1] );
               int errorCount = parser->getErrorCount();
               if (errorCount > 0) errorsOccured = true;
          }
          catch( const XMLException& e )
          {
               cerr << "An error occured during parsing file: " << av[1]
<< endl << "Exception message is: " << endl << DOMString(e.getMessage())
<< endl;
               errorsOccured = true;
          }
          catch (const SAXParseException& e)
          {
               cerr << "An SAXParseException error occured during
parsing, got SAXParseException " << DOMString(e.getMessage()) << "\n" ;
               errorsOccured = true;
          }
          catch (...)
          {
               cerr << "\nUnexpected exception during parsing: '" <<
av[1] << "'\n";
               errorsOccured = true;
          }

          if ( errorsOccured || errReporter->getSawErrors() ){
               cerr << "Parse unsuccessful!" << endl;
               delete errReporter;
               delete parser;
               XMLPlatformUtils::Terminate();
               return 1;
          }

          delete errReporter;
          delete parser;

          cout << "Parse successful!" << endl;

          sleep(2);
     } /* for */

     XMLPlatformUtils::Terminate();

     return 0;
}




---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org


Re: memory leak

Posted by Jason Jesso <jj...@global-matrix.com>.
I meant to say that the parser resources seems like its "not" getting
released.

Jason Jesso wrote:

> I have this program that enters an infinite loop.  It creates a parser
> and parses the xml file.  I then delete the parser using delete.  And so
> on, over and over again.
>
> Looking at the SZ column from ps (on AIX4.3.3) this number keeps
> increasing.  This suggests and memory leak or the parser resources are
> getting released.  I am calling delete on the parser.
>
> Can someone help?
>
> int
> main( int ac, char* av[] )
> {
>      DOMParser *parser;
>
>      if ( ac != 2 ){
>           cerr << "usage: " << av[0] << " xml file" << endl;
>           return 1;
>      }
>
>      try
>      {
>           XMLPlatformUtils::Initialize();
>      }
>      catch( const XMLException& e )
>      {
>           cerr << "Error during initialization! :\n"
>                << e.getMessage() << "\n";
>           return 1;
>      }
>
>      for ( ;; ){
>           parser = new DOMParser;
>           parser->setValidationScheme(DOMParser::Val_Always);
>           DOMTreeErrorReporter *errReporter = new
> DOMTreeErrorReporter();
>           parser->setErrorHandler(errReporter);
>
>           //
>           //  Parse the XML file, catching any XML exceptions that might
> propogate
>           //  out of it.
>           //
>           bool errorsOccured = false;
>
>           try
>           {
>                parser->parse( av[1] );
>                int errorCount = parser->getErrorCount();
>                if (errorCount > 0) errorsOccured = true;
>           }
>           catch( const XMLException& e )
>           {
>                cerr << "An error occured during parsing file: " << av[1]
> << endl << "Exception message is: " << endl << DOMString(e.getMessage())
> << endl;
>                errorsOccured = true;
>           }
>           catch (const SAXParseException& e)
>           {
>                cerr << "An SAXParseException error occured during
> parsing, got SAXParseException " << DOMString(e.getMessage()) << "\n" ;
>                errorsOccured = true;
>           }
>           catch (...)
>           {
>                cerr << "\nUnexpected exception during parsing: '" <<
> av[1] << "'\n";
>                errorsOccured = true;
>           }
>
>           if ( errorsOccured || errReporter->getSawErrors() ){
>                cerr << "Parse unsuccessful!" << endl;
>                delete errReporter;
>                delete parser;
>                XMLPlatformUtils::Terminate();
>                return 1;
>           }
>
>           delete errReporter;
>           delete parser;
>
>           cout << "Parse successful!" << endl;
>
>           sleep(2);
>      } /* for */
>
>      XMLPlatformUtils::Terminate();
>
>      return 0;
> }
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
> For additional commands, e-mail: xerces-c-dev-help@xml.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org