From 88c7b25e5b0cdf8bb0709f0f7e728f637e72b33c Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 10 Jul 2011 17:56:29 +1000 Subject: CGE: Fixed more free/delete[] mismatches identified by Valgrind --- engines/cge/bitmap.cpp | 8 ++++---- engines/cge/cge.cpp | 4 ++-- engines/cge/events.cpp | 2 +- engines/cge/vga13h.cpp | 16 ++++++++++++++-- 4 files changed, 21 insertions(+), 9 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/bitmap.cpp b/engines/cge/bitmap.cpp index 4630f87456..a8264e6c3f 100644 --- a/engines/cge/bitmap.cpp +++ b/engines/cge/bitmap.cpp @@ -151,7 +151,7 @@ Bitmap::~Bitmap() { delete[](uint8 *) _v; break; case FAR_MEM : - free(_v); + delete[] _v; default: warning("Unhandled MemType in Bitmap destructor"); break; @@ -206,7 +206,7 @@ BMP_PTR Bitmap::code() { delete[](uint8 *) _v; break; case FAR_MEM : - free(_v); + delete[] _v; break; default: warning("Unhandled MemType in Bitmap::Code()"); @@ -294,7 +294,7 @@ BMP_PTR Bitmap::code() { break; uint16 sizV = (uint16)(im - 2 - _v); - _v = farnew(uint8, sizV + _h * sizeof(*_b)); + _v = new uint8[sizV + _h * sizeof(*_b)]; if (!_v) error("No core"); @@ -436,7 +436,7 @@ bool Bitmap::loadVBM(XFile *f) { f->seek(f->mark() + PAL_SIZ); } } - if ((_v = farnew(uint8, n)) == NULL) + if ((_v = new uint8[n]) == NULL) return false; if (f->_error == 0) diff --git a/engines/cge/cge.cpp b/engines/cge/cge.cpp index 2957ba87f1..731f92854e 100644 --- a/engines/cge/cge.cpp +++ b/engines/cge/cge.cpp @@ -136,6 +136,8 @@ CGEEngine::~CGEEngine() { delete _console; // Delete engine objects + delete _vga; + delete _sys; delete _sprite; delete _miniCave; delete _shadow; @@ -153,8 +155,6 @@ CGEEngine::~CGEEngine() { delete _snail; delete _snail_; delete _hero; - delete _vga; - delete _sys; } Common::Error CGEEngine::run() { diff --git a/engines/cge/events.cpp b/engines/cge/events.cpp index 71110c4067..e12031bb38 100644 --- a/engines/cge/events.cpp +++ b/engines/cge/events.cpp @@ -154,7 +154,7 @@ Mouse::Mouse(CGEEngine *vm) : Sprite(vm, NULL), _busy(NULL), _hold(NULL), _hx(0) _buttons = 0; _busy = NULL; _active = false; - _flags._kill = true; + _flags._kill = false; setSeq(ms); BMP_PTR *MC = new BMP_PTR[3]; diff --git a/engines/cge/vga13h.cpp b/engines/cge/vga13h.cpp index 6e0493695a..73a753b600 100644 --- a/engines/cge/vga13h.cpp +++ b/engines/cge/vga13h.cpp @@ -356,12 +356,14 @@ Sprite::Sprite(CGEEngine *vm, BMP_PTR *shpP) _seqPtr = 0; _shpCnt = 0; _prev = _next = NULL; - +static int ctr = 1; +debug("create %d %x", ctr++, this); setShapeList(shpP); } Sprite::~Sprite() { +debug("destroy %x", this); if (_sprite == this) _sprite = NULL; contract(); @@ -775,7 +777,7 @@ BMP_PTR Sprite::ghost() { error("No core"); bmp->_w = e->_b1->_w; bmp->_h = e->_b1->_h; - if ((bmp->_b = farnew(HideDesc, bmp->_h)) == NULL) + if ((bmp->_b = new HideDesc[bmp->_h]) == NULL) error("No Core"); bmp->_v = (uint8 *) memcpy(bmp->_b, e->_b1->_b, sizeof(HideDesc) * bmp->_h); // TODO offset correctly in the surface using y1 pitch and x1 and not via offset segment @@ -903,8 +905,18 @@ void Queue::insert(Sprite *spr) { spr->contract(); } +template +inline bool contains(const Common::List &l, const T &v) { + return (Common::find(l.begin(), l.end(), v) != l.end()); +} +Common::List l; Sprite *Queue::remove(Sprite *spr) { + if (contains(l, spr)) { + debug("N"); + } + l.push_back(spr); + if (spr == _head) _head = spr->_next; if (spr == _tail) -- cgit v1.2.3