From 87893e3644a3cdee366be70c9fb6d05ea6418351 Mon Sep 17 00:00:00 2001 From: Emmanuel Christophe <emmanuel.christophe@orfeo-toolbox.org> Date: Sun, 17 Jan 2010 18:25:04 +0800 Subject: [PATCH] BUG: fix memory leaks --- Code/IO/otbImageFileReader.txx | 1 + .../ossim/EnvisatAsar/EnvisatAsarRecord.h | 3 +++ .../otbossimplugins/ossim/RadarSat/Data/Data.cpp | 16 ++++++++++------ .../ossim/RadarSat/Data/DataFactory.cpp | 11 +++++++++++ .../ossim/RadarSat/Data/ProcessedDataRecord.h | 3 +++ .../ossim/RadarSat/Leader/Leader.cpp | 2 +- .../ossim/RadarSat/Leader/LeaderFactory.cpp | 13 +++++++++++++ .../ossim/ossimRadarSat2Model.cpp | 3 ++- .../otbossimplugins/ossim/ossimRadarSatModel.cpp | 13 +++++++++++++ 9 files changed, 57 insertions(+), 8 deletions(-) diff --git a/Code/IO/otbImageFileReader.txx b/Code/IO/otbImageFileReader.txx index f8b80ce373..7fc06d715d 100644 --- a/Code/IO/otbImageFileReader.txx +++ b/Code/IO/otbImageFileReader.txx @@ -380,6 +380,7 @@ ImageFileReader<TOutputImage> if (projection) { hasMetaData = projection->saveState(geom_kwl); + delete projection; } } // Free memory diff --git a/Utilities/otbossimplugins/ossim/EnvisatAsar/EnvisatAsarRecord.h b/Utilities/otbossimplugins/ossim/EnvisatAsar/EnvisatAsarRecord.h index e653bb8589..5edc646999 100644 --- a/Utilities/otbossimplugins/ossim/EnvisatAsar/EnvisatAsarRecord.h +++ b/Utilities/otbossimplugins/ossim/EnvisatAsar/EnvisatAsarRecord.h @@ -97,6 +97,9 @@ protected: res[nb_octets-1-i] = buffer[i]; } memcpy(&value,res,nb_octets); + + free(buffer); + free(res); } } diff --git a/Utilities/otbossimplugins/ossim/RadarSat/Data/Data.cpp b/Utilities/otbossimplugins/ossim/RadarSat/Data/Data.cpp index d942d48307..86aabd5fbc 100644 --- a/Utilities/otbossimplugins/ossim/RadarSat/Data/Data.cpp +++ b/Utilities/otbossimplugins/ossim/RadarSat/Data/Data.cpp @@ -68,7 +68,7 @@ std::istream& operator>>(std::istream& is, Data& data) else { if (header.get_rec_seq() == 1) { // ImageOptionsFileDescriptor - RadarSatRecord* record = factory.Instanciate(header.get_rec_seq()); + RadarSatRecord* record = factory.Instanciate(header.get_rec_seq()); if (record != NULL) { record->Read(is); @@ -80,12 +80,13 @@ std::istream& operator>>(std::istream& is, Data& data) { char* buff = new char[header.get_length()-12]; is.read(buff, header.get_length()-12); - delete buff; + delete[] buff; } } else if ((header.get_rec_seq() == 2)) { // First line ProcessedDataRecord - RadarSatRecord* record = factory.Instanciate(2); + lineLength = header.get_length() ; + RadarSatRecord* record = factory.Instanciate(2); if (record != NULL) { record->Read(is); @@ -93,28 +94,31 @@ std::istream& operator>>(std::istream& is, Data& data) char* buff = new char[header.get_length()-192]; is.read(buff, header.get_length()-192); // Reads the rest of the line + delete[] buff; } else { char* buff = new char[header.get_length()-12]; is.read(buff, header.get_length()-12); - delete buff; + delete[] buff; } } else if ((header.get_rec_seq() == (1+nbLin))) { // Last line ProcessedDataRecord - RadarSatRecord* record = factory.Instanciate(2); + RadarSatRecord* record = factory.Instanciate(2); if (record != NULL) { record->Read(is); data._records[Data::LastProcessedDataRecordID] = record; + char* buff = new char[header.get_length()-192]; is.read(buff, header.get_length()-192); // Reads the rest of the line + delete[] buff; } else { char* buff = new char[header.get_length()-12]; is.read(buff, header.get_length()-12); - delete buff; + delete[] buff; } } else diff --git a/Utilities/otbossimplugins/ossim/RadarSat/Data/DataFactory.cpp b/Utilities/otbossimplugins/ossim/RadarSat/Data/DataFactory.cpp index 94de79938a..9889547dfd 100644 --- a/Utilities/otbossimplugins/ossim/RadarSat/Data/DataFactory.cpp +++ b/Utilities/otbossimplugins/ossim/RadarSat/Data/DataFactory.cpp @@ -25,6 +25,17 @@ DataFactory::DataFactory() DataFactory::~DataFactory() { + std::map<int, RadarSatRecord*>::iterator i = _availableRecords.begin(); + while (i != _availableRecords.end()) + { + if ( (*i).second ) + { + delete (*i).second; + (*i).second = 0; + } + ++i; + } + _availableRecords.clear(); } } diff --git a/Utilities/otbossimplugins/ossim/RadarSat/Data/ProcessedDataRecord.h b/Utilities/otbossimplugins/ossim/RadarSat/Data/ProcessedDataRecord.h index c1fbb8492c..0ac120eeff 100644 --- a/Utilities/otbossimplugins/ossim/RadarSat/Data/ProcessedDataRecord.h +++ b/Utilities/otbossimplugins/ossim/RadarSat/Data/ProcessedDataRecord.h @@ -412,6 +412,9 @@ private: res[nb_octets-1-i] = buffer[i]; } memcpy(&value,res,nb_octets); + + free(buffer); + free(res); } } }; diff --git a/Utilities/otbossimplugins/ossim/RadarSat/Leader/Leader.cpp b/Utilities/otbossimplugins/ossim/RadarSat/Leader/Leader.cpp index 309c0c15bc..9313d5e867 100644 --- a/Utilities/otbossimplugins/ossim/RadarSat/Leader/Leader.cpp +++ b/Utilities/otbossimplugins/ossim/RadarSat/Leader/Leader.cpp @@ -86,7 +86,7 @@ std::istream& operator>>(std::istream& is, Leader& data) { char* buff = new char[header.get_length()-12]; is.read(buff, header.get_length()-12); - delete buff; + delete[] buff; } } } diff --git a/Utilities/otbossimplugins/ossim/RadarSat/Leader/LeaderFactory.cpp b/Utilities/otbossimplugins/ossim/RadarSat/Leader/LeaderFactory.cpp index c2cbf1888f..3b5bd1cded 100644 --- a/Utilities/otbossimplugins/ossim/RadarSat/Leader/LeaderFactory.cpp +++ b/Utilities/otbossimplugins/ossim/RadarSat/Leader/LeaderFactory.cpp @@ -41,5 +41,18 @@ LeaderFactory::LeaderFactory() LeaderFactory::~LeaderFactory() { + std::map<int, RadarSatRecord*>::iterator i = _availableRecords.begin(); + + while (i != _availableRecords.end()) + { + if ( (*i).second ) + { + delete (*i).second; + (*i).second = 0; + } + ++i; + } + _availableRecords.clear(); + } } diff --git a/Utilities/otbossimplugins/ossim/ossimRadarSat2Model.cpp b/Utilities/otbossimplugins/ossim/ossimRadarSat2Model.cpp index 19b24dd7d0..9287177efa 100644 --- a/Utilities/otbossimplugins/ossim/ossimRadarSat2Model.cpp +++ b/Utilities/otbossimplugins/ossim/ossimRadarSat2Model.cpp @@ -502,7 +502,8 @@ bool ossimRadarSat2Model::InitRefPoint(const ossimKeywordlist &kwl, date->set_second((int) floor(time)) ; date->set_decimal(time - floor(time)) ; } - + delete date;//FIXME to confirm + if(_platformPosition != 0) { Ephemeris * ephemeris = _platformPosition->Interpolate((JSDDateTime)*date); diff --git a/Utilities/otbossimplugins/ossim/ossimRadarSatModel.cpp b/Utilities/otbossimplugins/ossim/ossimRadarSatModel.cpp index cd57925598..fb09615bce 100644 --- a/Utilities/otbossimplugins/ossim/ossimRadarSatModel.cpp +++ b/Utilities/otbossimplugins/ossim/ossimRadarSatModel.cpp @@ -53,6 +53,16 @@ ossimRadarSatModel::ossimRadarSatModel(): ossimRadarSatModel::~ossimRadarSatModel() { + if (_data != 0) + { + delete _data; + } + + if (_leader != 0) + { + delete _leader; + } + } ossimObject* ossimRadarSatModel::dup() const @@ -623,9 +633,12 @@ bool ossimRadarSatModel::InitPlatformPosition(const ossimKeywordlist &kwl, const ephemeris[i] = eph; delete tmpEphemeris; + delete greenwich_mha; } + delete greenwich_mha_ref2000; + /* * Antenna position interpolator creation */ -- GitLab