Re: [Dcmlib] Amélioration des Memory leak

Benoit Regrain benoit.regrain at creatis.insa-lyon.fr
Wed Nov 17 14:14:44 CET 2004


Hi,

Afin d'offrir une utilisation plus simple, j'ai mis la copie des données binaires dans la méthode
ReplaceOrCreateByNumber. Désormais, tous les ReplaceOrCreateByNumber fonctionnement
de la même manière en copiant les données passées en entrée.

Désolé d'avoir cassé le test TestCopyDicom sous linux.
Coté Windows, si quelqu'un a une idée pour que ce test passe, je suis preneur. Il semble que
le problème soit lié à la Hash Table récupérée.

Benoit

  ----- Original Message ----- 
  From: Jean-Michel Rouet 
  To: dcmlib at creatis.insa-lyon.fr 
  Sent: Tuesday, November 16, 2004 9:54 PM
  Subject: [Dcmlib] Amélioration des Memory leak


  Pour TestCopyDicom.cxx voici un petit patch qui devrait regler l'affaire:

  rouet at vanoise:~/src/gdcm/Test$ cvs diff -u TestCopyDicom.cxx
  Index: TestCopyDicom.cxx
  ===================================================================
  RCS file: /cvs/public/gdcm/Test/TestCopyDicom.cxx,v
  retrieving revision 1.16
  diff -u -r1.16 TestCopyDicom.cxx
  --- TestCopyDicom.cxx   16 Nov 2004 04:28:20 -0000      1.16
  +++ TestCopyDicom.cxx   16 Nov 2004 20:51:07 -0000
  @@ -91,6 +91,7 @@
         size_t dataSize = original->GetImageDataSize();
         uint8_t* imageData = original->GetImageData();

  +
         //First of all copy the header field by field

         // Warning :Accessor gdcmElementSet::GetEntry() should not exist
  @@ -105,8 +106,13 @@
            d = tag->second;
            if ( gdcm::BinEntry* b = dynamic_cast<gdcm::BinEntry*>(d) )
            {
  +            uint8_t* copybin = new uint8_t[b->GetLength()];
  +           if (b->GetBinArea())
  +               memcpy(copybin,b->GetBinArea(), b->GetLength());
  +           else
  +              copybin = 0;
               copy->GetHeader()->ReplaceOrCreateByNumber(
  -                                 b->GetBinArea(),
  +                                 copybin,
                                    b->GetLength(),
                                    b->GetGroup(),
                                    b->GetElement(),
  @@ -130,7 +136,6 @@
            }
         }

  -      copy->SetImageData(imageData, dataSize);
         original->GetHeader()->SetImageDataSize(dataSize);

         copy->WriteDcmExplVR( output );
  @@ -147,6 +152,7 @@
            std::cout << output << " Failed" << std::endl;
         }
         i++;
  +      delete copy;
      }
      return retVal;
   }


------------------------------------------------------------------------------


  _______________________________________________
  Dcmlib mailing list
  Dcmlib at creatis.insa-lyon.fr
  http://www.creatis.insa-lyon.fr/mailman/listinfo/dcmlib
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.creatis.insa-lyon.fr/pipermail/dcmlib/attachments/20041117/4b5e533c/attachment.html>


More information about the Dcmlib mailing list