From 5e64f1feb4d82a4da9893dca043212ac90807fe4 Mon Sep 17 00:00:00 2001 From: malaterre Date: Fri, 5 Nov 2004 21:23:46 +0000 Subject: [PATCH] BUG: Remove tons of mem leaks. There are still plenty that explains why gdcm is dog slow on system with little mem --- Testing/TestReadWriteReadCompare.cxx | 12 ++++++------ src/gdcmDocument.cxx | 16 ++++++++++++---- src/gdcmElementSet.cxx | 6 +++--- src/gdcmFile.cxx | 13 ++++++++++--- 4 files changed, 31 insertions(+), 16 deletions(-) diff --git a/Testing/TestReadWriteReadCompare.cxx b/Testing/TestReadWriteReadCompare.cxx index 23dc39f9..66115b8e 100644 --- a/Testing/TestReadWriteReadCompare.cxx +++ b/Testing/TestReadWriteReadCompare.cxx @@ -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; diff --git a/src/gdcmDocument.cxx b/src/gdcmDocument.cxx index bdf5a01c..ab150ec1 100644 --- a/src/gdcmDocument.cxx +++ b/src/gdcmDocument.cxx @@ -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 diff --git a/src/gdcmElementSet.cxx b/src/gdcmElementSet.cxx index 261c623c..47de1a18 100644 --- a/src/gdcmElementSet.cxx +++ b/src/gdcmElementSet.cxx @@ -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 { diff --git a/src/gdcmFile.cxx b/src/gdcmFile.cxx index 0b9fe2db..6276a5bc 100644 --- a/src/gdcmFile.cxx +++ b/src/gdcmFile.cxx @@ -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; } -- 2.46.0