From 468c0173d9555a2f72df6a3283fe9a7a275ffca5 Mon Sep 17 00:00:00 2001 From: Dave Goodwin Date: Thu, 6 Jan 2005 11:09:19 +0000 Subject: [PATCH] fixed memory leak in operator= --- Cantera/src/ctvector.cpp | 99 +++------------------------------------- 1 file changed, 6 insertions(+), 93 deletions(-) diff --git a/Cantera/src/ctvector.cpp b/Cantera/src/ctvector.cpp index 12a222286..101d73b54 100755 --- a/Cantera/src/ctvector.cpp +++ b/Cantera/src/ctvector.cpp @@ -50,13 +50,11 @@ std::ostream& operator<<(std::ostream& s, const ctvector_fp& v) { } ctvector_fp::ctvector_fp(const ctvector_fp& x) { + _data = 0; if (x._alloc > 0) { _data = new value_type[x._alloc]; copy(x._data, x._data + x._alloc, _data); } - else { - _data = 0; - } _size = x._size; _alloc = x._alloc; } @@ -64,13 +62,12 @@ std::ostream& operator<<(std::ostream& s, const ctvector_fp& v) { ctvector_fp ctvector_fp::operator=(const ctvector_fp& x) { if (this == &x) return *this; if (_data) delete[] _data; + _data = 0; if (x._alloc > 0) { + if (_alloc > 0) delete[] _data; _data = new value_type[x._alloc]; copy(x._data, x._data + x._alloc, _data); } - else { - _data = 0; - } _size = x._size; _alloc = x._alloc; return *this; @@ -120,92 +117,6 @@ std::ostream& operator<<(std::ostream& s, const ctvector_fp& v) { void ctvector_fp::clear() { fill(_data, _data + _size, 0.0); resize(0); } -// //-------------------------------------// -// // ctvector_float // -// //-------------------------------------// - - -// ctvector_float::ctvector_float(size_t n) : _size(0), _alloc(0), _data(0) { -// resize(n); -// } - -// ctvector_float::ctvector_float(size_t n, value_type v0) -// : _size(0), _alloc(0), _data(0) { -// resize(n, v0); -// } - -// ctvector_float::ctvector_float(const ctvector_float& x) { -// if (x._alloc > 0) { -// _data = new value_type[x._alloc]; -// copy(x._data, x._data + x._alloc, _data); -// } -// else { -// _data = 0; -// } -// _size = x._size; -// _alloc = x._alloc; -// } - -// ctvector_float ctvector_float::operator=(const ctvector_float& x) { -// if (this == &x) return *this; -// if (_data) delete[] _data; -// if (x._alloc > 0) { -// _data = new value_type[x._alloc]; -// copy(x._data, x._data + x._alloc, _data); -// } -// else { -// _data = 0; -// } -// _size = x._size; -// _alloc = x._alloc; -// return *this; -// } - -// ctvector_float::~ctvector_float() { -// if (_data) delete[] _data; -// _data = 0; -// } - -// void ctvector_float::resize(size_t n) { -// size_t new_alloc = n+1; -// value_type* newdata = new value_type[new_alloc]; -// size_t datalen = (n > _size ? _size : n); -// if (_data) { -// copy(_data, _data + datalen, newdata); -// } -// if (_data) delete[] _data; -// _data = newdata; -// _alloc = new_alloc; -// _size = n; -// } - -// void ctvector_float::resize(size_t n, value_type v0) { -// size_t new_alloc = n+1; -// value_type* newdata = new value_type[new_alloc]; -// fill(newdata, newdata + new_alloc, v0); -// size_t datalen = (n > _size ? _size : n); -// if (_data) { -// copy(_data, _data + datalen, newdata); -// } -// if (_data) delete[] _data; -// _data = newdata; -// _alloc = new_alloc; -// _size = n; -// } - -// void ctvector_float::push_back(value_type x) { -// size_t loc = _size; -// if (_size == _alloc) { -// resize(2*_alloc); -// } -// _data[loc] = x; -// _size = loc + 1; -// } - -// void ctvector_float::clear() { fill(_data, _data + _size, 0.0); resize(0); } - - - //-------------------------------------// // ctvector_int // //-------------------------------------// @@ -231,6 +142,8 @@ std::ostream& operator<<(std::ostream& s, const ctvector_fp& v) { ctvector_int ctvector_int::operator=(const ctvector_int& x) { if (this == &x) return *this; + if (_data) delete[] _data; + _data = 0; if (x._alloc > 0) { _data = new value_type[x._alloc]; copy(x._data, x._data + x._alloc, _data); @@ -241,7 +154,7 @@ std::ostream& operator<<(std::ostream& s, const ctvector_fp& v) { } ctvector_int::~ctvector_int() { - if (_alloc > 0) delete[] _data; + if (_data) delete[] _data; _data = 0; }