diff options
author | Paul Gilbert | 2012-05-05 10:32:43 +1000 |
---|---|---|
committer | Paul Gilbert | 2012-05-05 10:32:43 +1000 |
commit | 734fae9193fdabd6dcac5f40f765d904c030f7d1 (patch) | |
tree | 4dfa6f2a449da5b054c43be2c0e331bb490f4a6e /engines/tony | |
parent | 91328fce56144caf15abc8995b68a5a5a0562f0a (diff) | |
download | scummvm-rg350-734fae9193fdabd6dcac5f40f765d904c030f7d1.tar.gz scummvm-rg350-734fae9193fdabd6dcac5f40f765d904c030f7d1.tar.bz2 scummvm-rg350-734fae9193fdabd6dcac5f40f765d904c030f7d1.zip |
TONY: Fixed some memory leaks identified by Valgrind
Diffstat (limited to 'engines/tony')
-rw-r--r-- | engines/tony/gfxcore.cpp | 5 | ||||
-rw-r--r-- | engines/tony/gfxengine.cpp | 3 | ||||
-rw-r--r-- | engines/tony/inventory.cpp | 13 | ||||
-rw-r--r-- | engines/tony/loc.cpp | 8 | ||||
-rw-r--r-- | engines/tony/loc.h | 3 |
5 files changed, 27 insertions, 5 deletions
diff --git a/engines/tony/gfxcore.cpp b/engines/tony/gfxcore.cpp index 5737a6af45..de78b51a4e 100644 --- a/engines/tony/gfxcore.cpp +++ b/engines/tony/gfxcore.cpp @@ -709,11 +709,12 @@ void RMGfxSourceBuffer8RLE::SetAlphaBlendColor(int color) { RMGfxSourceBuffer8RLE::RMGfxSourceBuffer8RLE() { alphaBlendColor = -1; bNeedRLECompress = true; + m_buf = NULL; } RMGfxSourceBuffer8RLE::~RMGfxSourceBuffer8RLE() { if (m_buf != NULL) { - delete m_buf; + delete[] m_buf; m_buf = NULL; } } @@ -833,7 +834,7 @@ void RMGfxSourceBuffer8RLE::CompressRLE(void) { // Ci copia l'immagine compressa x = cur - MegaRLEBuf; m_buf = new byte[x]; - CopyMemory(m_buf, MegaRLEBuf, x); + Common::copy(MegaRLEBuf, MegaRLEBuf + x, m_buf); } void RMGfxSourceBuffer8RLE::Draw(RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim) { diff --git a/engines/tony/gfxengine.cpp b/engines/tony/gfxengine.cpp index 6b5105bc35..7f2515af7b 100644 --- a/engines/tony/gfxengine.cpp +++ b/engines/tony/gfxengine.cpp @@ -78,11 +78,14 @@ RMGfxEngine::RMGfxEngine() { // Crea il big buffer dove verranno disegnati i frame m_bigBuf.Create(RM_BBX, RM_BBY, 16); m_bigBuf.OffsetY(RM_SKIPY); + + csMainLoop = NULL; } RMGfxEngine::~RMGfxEngine() { // Chiude il buffer m_bigBuf.Destroy(); + g_system->deleteMutex(csMainLoop); } void RMGfxEngine::OpenOptionScreen(int type) { diff --git a/engines/tony/inventory.cpp b/engines/tony/inventory.cpp index ade9c0eb34..50e4dd9411 100644 --- a/engines/tony/inventory.cpp +++ b/engines/tony/inventory.cpp @@ -63,6 +63,7 @@ RMInventory::RMInventory() { m_state = CLOSED; m_bCombining = false; m_csModifyInterface = g_system->createMutex(); + m_nItems = 0; } RMInventory::~RMInventory() { @@ -94,7 +95,7 @@ void RMInventory::Init(void) { // Nuovi oggetti m_nItems = 78; // @@@ Numero di oggetti prendibili - m_items = new RMInventoryItem[m_nItems+1]; + m_items = new RMInventoryItem[m_nItems + 1]; curres = 10500; @@ -114,14 +115,15 @@ void RMInventory::Init(void) { ds.Close(); // Mette di default a pattern 1 - m_items[i].status=1; + m_items[i].pointer = NULL; + m_items[i].status = 1; m_items[i].icon.SetPattern(1); m_items[i].icon.DoFrame(this, false); curres++; if (i == 0 || i == 28 || i == 29) continue; - m_items[i].pointer=new RMGfxSourceBuffer8RLEByteAA[m_items[i].icon.NumPattern()]; + m_items[i].pointer = new RMGfxSourceBuffer8RLEByteAA[m_items[i].icon.NumPattern()]; for (j = 0; j < m_items[i].icon.NumPattern(); j++) { RMResRaw raw(curres); @@ -174,6 +176,11 @@ void RMInventory::Init(void) { void RMInventory::Close(void) { // Ciao memoria if (m_items != NULL) { + // Delete the item pointers + for (int i = 0; i <= m_nItems; i++) + delete[] m_items[i].pointer; + + // Delete the items array delete[] m_items; m_items = NULL; } diff --git a/engines/tony/loc.cpp b/engines/tony/loc.cpp index 62249da255..b5a233391a 100644 --- a/engines/tony/loc.cpp +++ b/engines/tony/loc.cpp @@ -1694,6 +1694,14 @@ RMDataStream &operator>>(RMDataStream &ds, RMBox &box) { * RMBoxLoc Methods \****************************************************************************/ +RMBoxLoc::RMBoxLoc() { + boxes = NULL; +} + +RMBoxLoc::~RMBoxLoc() { + delete[] boxes; +} + void RMBoxLoc::ReadFromStream(RMDataStream &ds) { int i; char buf[2]; diff --git a/engines/tony/loc.h b/engines/tony/loc.h index c5c7859e73..c176367cd4 100644 --- a/engines/tony/loc.h +++ b/engines/tony/loc.h @@ -350,6 +350,9 @@ private: void ReadFromStream(RMDataStream& ds); public: + RMBoxLoc(); + virtual ~RMBoxLoc(); + friend RMDataStream& operator >>(RMDataStream &ds, RMBoxLoc &bl); void RecalcAllAdj(void); }; |