From 88062e90a00112e8c959edf7adac83db489198c2 Mon Sep 17 00:00:00 2001 From: Sven Hesse Date: Thu, 25 Jun 2009 10:54:35 +0000 Subject: Plugging some memory leaks svn-id: r41859 --- engines/gob/game.cpp | 12 ++++++++++++ engines/gob/inter_v3.cpp | 4 +++- engines/gob/resources.cpp | 2 ++ engines/gob/scenery.cpp | 2 ++ engines/gob/sound/sounddesc.cpp | 10 ++++++++-- 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/engines/gob/game.cpp b/engines/gob/game.cpp index 59e2627bd5..9a5825a475 100644 --- a/engines/gob/game.cpp +++ b/engines/gob/game.cpp @@ -95,6 +95,18 @@ Game::Game(GobEngine *vm) : _vm(vm) { } Game::~Game() { + for (int i = 0; i < 5; i++) { + warning("%d", i); + if (_scriptArray[i] != _script) { + warning("DELETE (%d)", _scriptArray[i] != 0); + delete _scriptArray[i]; + } + if (_resourcesArray[i] != _resources) { + warning("DELETE (%d)", _resourcesArray[i] != 0); + delete _resourcesArray[i]; + } + } + delete _script; delete _resources; } diff --git a/engines/gob/inter_v3.cpp b/engines/gob/inter_v3.cpp index 0750d29947..17ce7feafa 100644 --- a/engines/gob/inter_v3.cpp +++ b/engines/gob/inter_v3.cpp @@ -217,8 +217,10 @@ bool Inter_v3::o3_getTotTextItemPart(OpFuncParams ¶ms) { if (((*totData != 2) && (*totData != 5)) || (ABS(offY - READ_LE_UINT16(totData + 3)) > 1)) { - if (curPart == part) + if (curPart == part) { + delete textItem; return false; + } stringVar = stringStartVar; WRITE_VARO_UINT8(stringVar, 0); diff --git a/engines/gob/resources.cpp b/engines/gob/resources.cpp index 9a46ce2673..e803f8894c 100644 --- a/engines/gob/resources.cpp +++ b/engines/gob/resources.cpp @@ -678,6 +678,7 @@ byte *Resources::getEXTData(EXTResourceItem &extItem, uint32 size) const { return 0; } + delete stream; return data; } @@ -698,6 +699,7 @@ byte *Resources::getEXData(EXTResourceItem &extItem, uint32 size) const { return 0; } + delete stream; return data; } diff --git a/engines/gob/scenery.cpp b/engines/gob/scenery.cpp index 6d3748261e..7a4b8ad868 100644 --- a/engines/gob/scenery.cpp +++ b/engines/gob/scenery.cpp @@ -963,6 +963,8 @@ void Scenery::loadPieces(int16 pictDescId, PieceDesc *&pieceDesc, uint32 &pieces pieceDesc[i].top = resource->stream()->readSint16LE(); pieceDesc[i].bottom = resource->stream()->readSint16LE(); } + + delete resource; } } // End of namespace Gob diff --git a/engines/gob/sound/sounddesc.cpp b/engines/gob/sound/sounddesc.cpp index 79f4a48b77..b9b327d105 100644 --- a/engines/gob/sound/sounddesc.cpp +++ b/engines/gob/sound/sounddesc.cpp @@ -101,10 +101,16 @@ bool SoundDesc::load(SoundType type, Resource *resource) { } void SoundDesc::free() { - delete _resource; + if (_resource) { + delete _resource; + _data = 0; + } + + delete[] _data; _resource = 0; - _data = _dataPtr = 0; + _data = 0; + _dataPtr = 0; _id = 0; } -- cgit v1.2.3