Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1222 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Xerces C++ - Fuite de mémoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Xerces C++ - Fuite de mémoire

n°1221829
h-s
Posté le 13-10-2005 à 10:23:27  profilanswer
 

Dans une application C++, en utilisant le parser XML Xerces v2.5, je rencontre un problème de fuite de mémoire sous HP-UX11.0  
L'arbre XML créé en mémoire est correct, cependant la libération des ressources ne semble pas etre gérée correctement quand cet
arbre est reconstruit périodiquement. La commande "top" remonte une augmentation constante de la mémoire occupée par le process.
 
Voici le code représentant le problème. Merci de vos réponses :
 
 
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/dom/DOM.hpp>
#if defined(XERCES_NEW_IOSTREAMS)
#include <iostream>
#else
#include <iostream.h>
#endif
 
XERCES_CPP_NAMESPACE_USE
 
//  main
// ---------------------------------------------------------------------------
 
int main(int argC, char* argV[])
{
    // Initialize the XML4C2 system.
    try
    {
        XMLPlatformUtils::Initialize();
    }
 
    catch(const XMLException& toCatch)
    {
        char *pMsg = XMLString::transcode(toCatch.getMessage());
        XERCES_STD_QUALIFIER cerr << "Error during Xerces-c Initialization.\n"
             << "  Exception message:"
             << pMsg;
        XMLString::release(&pMsg);
        return 1;
    }
 
    // Watch for special case help request
    int errorCode = 0;
    if (argC > 1)
    {
        XERCES_STD_QUALIFIER cout << "\nUsage:\n"
                "    CreateDOMDocument\n\n"
                "This program creates a new DOM document from scratch in memory.\n"
             << XERCES_STD_QUALIFIER endl;
        errorCode = 1;
    }
    if(errorCode) {
        XMLPlatformUtils::Terminate();
        return errorCode;
    }
 
   {
       //  Nest entire test in an inner block.
       //  The tree we create below is the same that the XercesDOMParser would
       //  have created, except that no whitespace text nodes would be created.
 
       // <ROOT>
       //     <FILS1>TEXTE-FILS-1</FILS1>
       //     <FILS2>
       //          <FILS20>TEXTE-FILS-2-0</FILS20>
       //          <FILS21>TEXTE-FILS-2-1</FILS21>
       //          .........jusqu'à 1000 fils.....
       //          <FILS2999>TEXTE-FILS-2-1000</FILS21000>
       //     </FILS2>
       //          
       // </ROOT>
       XMLCh tempStr[100];
 
 
       XMLString::transcode("Core", tempStr, 99);
       DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(tempStr);
 
       if (impl != NULL)
       {
           int i = 0;
           char fils[50];
           char texteFils[50];
 
           try
           {
               XMLString::transcode("ROOT", tempStr, 99);
               DOMDocument* doc = impl->createDocument(0, tempStr, 0);
               DOMElement* rootElem = doc->getDocumentElement();  
               
 
               DOMElement* tabDOMElement[1000];
               DOMText* tabDOMText[1000];
 
 
               while (true){
 
                   XMLString::transcode("FILS1", tempStr, 99);
                   DOMElement*  fils1Elem = doc->createElement(tempStr);
                   rootElem->appendChild(fils1Elem);
                 
                   XMLString::transcode("TEXTE-FILS-1", tempStr, 99);
                   DOMText*    fils1Texte = doc->createTextNode(tempStr);
                   fils1Elem->appendChild(fils1Texte);
 
                   XMLString::transcode("FILS2", tempStr, 99);
                   DOMElement*  fils2Elem = doc->createElement(tempStr);
                   rootElem->appendChild(fils2Elem);
 
 
                   for (i=0; i<1000; i++){
                      memset(fils,'\0',50);
                      memset(texteFils,'\0',50);
                      sprintf(fils, "FILS2%d", i);
                      sprintf(texteFils, "TEXTE-FILS-2-%d", i);
 
                      XMLString::transcode(fils, tempStr, 99);
                      tabDOMElement[i] = doc->createElement(tempStr);  
 
                      XMLString::transcode(texteFils, tempStr, 99);
                      tabDOMText[i] = doc->createTextNode(tempStr);
 
                      fils2Elem->appendChild(tabDOMElement[i]);
                      tabDOMElement[i]->appendChild(tabDOMText[i]);
                   }
 
                   //LIBERATION DE "FILS1" et "FILS2"
                   rootElem->removeChild(fils1Elem);
                   fils1Elem->release();
                   rootElem->removeChild(fils2Elem);
                   fils2Elem->release();
 
                }//FIN DU WHILE
 
                doc->release();
           }
 
           catch (const DOMException& e)
           {
               XERCES_STD_QUALIFIER cerr << "DOMException code is:  " << e.code << XERCES_STD_QUALIFIER endl;
               errorCode = 2;
           }
           catch (...)
           {
               XERCES_STD_QUALIFIER cerr << "An error occurred creating the document" << XERCES_STD_QUALIFIER endl;
               errorCode = 3;
           }
       }  // (inpl != NULL)
       else
       {
           XERCES_STD_QUALIFIER cerr << "Requested implementation is not supported" << XERCES_STD_QUALIFIER endl;
           errorCode = 4;
       }
   }
 
   XMLPlatformUtils::Terminate();
   return errorCode;
}

mood
Publicité
Posté le 13-10-2005 à 10:23:27  profilanswer
 

n°1222974
Profil sup​primé
Posté le 14-10-2005 à 11:43:04  answer
 

j'ai déjà eu ce type de problème avec xerces sur socle hp
mais je n'ai pas trouvé de solution..

n°1223187
h-s
Posté le 14-10-2005 à 15:15:33  profilanswer
 

Salut,
 
voir http://issues.apache.org/bugzilla/ [...] i?id=24173
 
Je ne crois pas qu'il y a une solution !

n°1223352
Profil sup​primé
Posté le 14-10-2005 à 16:33:07  answer
 

je me disais bien..


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Xerces C++ - Fuite de mémoire

 

Sujets relatifs
[HTML] Perte de memoire[Résolu] Souci d'occupation mémoire
Garder en memoire les champs d'un formulaire...fuite de mémoire!
[BigDecimal-BigInteger] Connaitre la taille memoire d'un variblepb avec gestion memoire
[VBS] [Résolu] Libération mémoire d'objet WORDAugmentation mémoire pour servlets
question de memoire 
Plus de sujets relatifs à : Xerces C++ - Fuite de mémoire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR