]> Creatis software - gdcm.git/commitdiff
BUG: Remove tons of mem leaks. There are still plenty that explains why gdcm is dog...
authormalaterre <malaterre>
Fri, 5 Nov 2004 21:23:46 +0000 (21:23 +0000)
committermalaterre <malaterre>
Fri, 5 Nov 2004 21:23:46 +0000 (21:23 +0000)
Testing/TestReadWriteReadCompare.cxx
src/gdcmDocument.cxx
src/gdcmElementSet.cxx
src/gdcmFile.cxx

index 23dc39f981b423be96b5da2dcc2c720b97612265..66115b8e2d0feb80c1e38043c3f7319dc29fa95c 100644 (file)
@@ -74,8 +74,8 @@ int CompareInternal(std::string const & filename, std::string const & output)
       std::cout << std::endl
          << "        Pixel areas lengths differ: "
          << dataSize << " # " << dataSizeWritten << std::endl;
-      delete (char*)imageData;
-      delete (char*)imageDataWritten;
+      delete[] (char*)imageData;
+      delete[] (char*)imageDataWritten;
       delete header;
       delete file;
       delete reread;
@@ -87,8 +87,8 @@ int CompareInternal(std::string const & filename, std::string const & output)
       (void)res;
       std::cout << std::endl
          << "        Pixel differ (as expanded in memory)." << std::endl;
-      delete (char*)imageData;
-      delete (char*)imageDataWritten;
+      delete[] (char*)imageData;
+      delete[] (char*)imageDataWritten;
       delete header;
       delete file;
       delete reread;
@@ -97,8 +97,8 @@ int CompareInternal(std::string const & filename, std::string const & output)
    std::cout << "4...OK." << std::endl ;
 
    //////////////// Clean up:
-   delete (char*)imageData;
-   delete (char*)imageDataWritten;
+   delete[] (char*)imageData;
+   delete[] (char*)imageDataWritten;
    delete header;
    delete file;
    delete reread;
index bdf5a01c5f34398caf8704dc5d1d328b7844394e..ab150ec1196e13b5ab4c52f2f0e2dae1c8305131 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmDocument.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/11/05 20:23:14 $
-  Version:   $Revision: 1.117 $
+  Date:      $Date: 2004/11/05 21:23:46 $
+  Version:   $Revision: 1.118 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -201,6 +201,8 @@ Document::~Document ()
       //delete it->second; //temp remove
    }
    TagHT.clear();
+   delete RLEInfo;
+   delete JPEGInfo;
 }
 
 //-----------------------------------------------------------------------------
@@ -492,7 +494,7 @@ void Document::Write(std::ofstream* fp, FileType filetype)
    {
       std::string ts = 
          Util::DicomString( TransferSyntaxStrings[ExplicitVRLittleEndian] );
-      ReplaceOrCreateByNumber(ts, 0x0002, 0x0010);
+      ReplaceOrCreateByNumber(ts, 0x0002, 0x0010); //LEAK
       
       /// \todo Refer to standards on page 21, chapter 6.2
       ///       "Value representation": values with a VR of UI shall be
@@ -564,9 +566,13 @@ ValEntry* Document::ReplaceOrCreateByNumber(
       valEntry = new ValEntry(currentEntry);
       if ( !AddEntry(valEntry))
       {
+         delete valEntry;
          dbg.Verbose(0, "Document::ReplaceOrCreateByNumber: AddEntry"
                         " failed allthough this is a creation.");
       }
+      // This is the reason why NewDocEntryByNumber are a real
+      // bad habit !!! FIXME
+      delete currentEntry;
    }
    else
    {
@@ -579,12 +585,14 @@ ValEntry* Document::ReplaceOrCreateByNumber(
          valEntry = new ValEntry(currentEntry);
          if (!RemoveEntry(currentEntry))
          {
+            delete valEntry;
             dbg.Verbose(0, "Document::ReplaceOrCreateByNumber: removal"
                            " of previous DocEntry failed.");
             return NULL;
          }
          if ( !AddEntry(valEntry))
          {
+            delete valEntry;
             dbg.Verbose(0, "Document::ReplaceOrCreateByNumber: adding"
                            " promoted ValEntry failed.");
             return NULL;
@@ -1358,7 +1366,7 @@ void Document::ParseDES(DocEntrySet *set, long offset,
 
          //////////////////// BinEntry or UNKOWN VR:
             BinEntry* newBinEntry =
-               new BinEntry( newDocEntry->GetDictEntry() );
+               new BinEntry( newDocEntry->GetDictEntry() );  //LEAK
             newBinEntry->Copy( newDocEntry );
 
             // When "this" is a Document the Key is simply of the
index 261c623ce922555926b21d325dd10a40b380e55c..47de1a189018dc053e0f5f5235258847bfbc0bcf 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmElementSet.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/10/22 03:05:41 $
-  Version:   $Revision: 1.25 $
+  Date:      $Date: 2004/11/05 21:23:46 $
+  Version:   $Revision: 1.26 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -115,7 +115,7 @@ bool ElementSet::AddEntry( DocEntry* newEntry)
    {
       dbg.Verbose(1, "ElementSet::AddEntry key already present: ",
                   key.c_str());
-      return(false);
+      return false;
    } 
    else 
    {
index 0b9fe2dbf1c1c816259700a2c3834eba619a9217..6276a5bcd1f5dad974f59d271a14636f6d06621a 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmFile.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/11/03 20:52:13 $
-  Version:   $Revision: 1.151 $
+  Date:      $Date: 2004/11/05 21:23:46 $
+  Version:   $Revision: 1.152 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -73,6 +73,7 @@ File::File(std::string const & filename )
  */
 void File::Initialise()
 {
+   PixelConverter = NULL; //just in case
    if ( HeaderInternal->IsReadable() )
    {
       ImageDataSizeRaw = ComputeDecompressedPixelDataSizeFromHeader();
@@ -85,7 +86,7 @@ void File::Initialise()
          ImageDataSize = ImageDataSizeRaw;
       }
 
-      PixelConverter = new PixelConvert;
+      PixelConverter = new PixelConvert;  //LEAK !
       PixelConverter->GrabInformationsFromHeader( HeaderInternal );
    }
    SaveInitialValues();
@@ -105,6 +106,11 @@ File::~File()
    HeaderInternal = 0;
 
    DeleteInitialValues();
+   if( PixelConverter )
+   {
+      //delete PixelConverter;
+   }
+
 }
 
 /**
@@ -700,6 +706,7 @@ bool File::WriteBase (std::string const & fileName, FileType type)
    }
    // ----------------- End of Special Patch ----------------
    fp1->close ();
+   delete fp1;
 
    return true;
 }