SAGA: Fixed memory leaks in the SAGA engine

svn-id: r32673
This commit is contained in:
Christopher Page 2008-06-12 16:58:02 +00:00
parent e86a422e25
commit dd423f803b
10 changed files with 37 additions and 4 deletions

View file

@ -55,6 +55,7 @@ Anim::Anim(SagaEngine *vm) : _vm(vm) {
Anim::~Anim(void) { Anim::~Anim(void) {
reset(); reset();
freeCutawayList();
} }
void Anim::loadCutawayList(const byte *resourcePointer, size_t resourceLength) { void Anim::loadCutawayList(const byte *resourcePointer, size_t resourceLength) {

View file

@ -63,6 +63,8 @@ Font::~Font(void) {
free(_fonts[i]); free(_fonts[i]);
} }
free(_fonts);
} }

View file

@ -334,7 +334,21 @@ Interface::Interface(SagaEngine *vm) : _vm(vm) {
Interface::~Interface(void) { Interface::~Interface(void) {
free(_inventory); free(_inventory);
free(_mainPanel.image);
free(_conversePanel.image);
free(_optionPanel.image);
free(_quitPanel.image);
free(_loadPanel.image);
free(_savePanel.image);
_mainPanel.sprites.freeMem(); _mainPanel.sprites.freeMem();
_conversePanel.sprites.freeMem();
_optionPanel.sprites.freeMem();
_quitPanel.sprites.freeMem();
_loadPanel.sprites.freeMem();
_savePanel.sprites.freeMem();
_protectPanel.sprites.freeMem();
_defPortraits.freeMem(); _defPortraits.freeMem();
_scenePortraits.freeMem(); _scenePortraits.freeMem();
} }

View file

@ -112,7 +112,11 @@ struct InterfacePanel {
buttonsCount = 0; buttonsCount = 0;
buttons = NULL; buttons = NULL;
} }
/*
~InterfacePanel() {
sprites.freeMem();
}
*/
PanelButton *getButton(int index) { PanelButton *getButton(int index) {
if ((index >= 0) && (index < buttonsCount)) { if ((index >= 0) && (index < buttonsCount)) {
return &buttons[index]; return &buttons[index];

View file

@ -132,6 +132,8 @@ void Scene::IHNMLoadCutaways() {
// Load the cutaways for the title screens // Load the cutaways for the title screens
_vm->_anim->loadCutawayList(resourcePointer, resourceLength); _vm->_anim->loadCutawayList(resourcePointer, resourceLength);
free(resourcePointer);
} }
bool Scene::checkKey() { bool Scene::checkKey() {

View file

@ -769,6 +769,7 @@ void Resource::loadGlobalResources(int chapter, int actorsEntrance) {
_vm->_sprite->_mainSprites.freeMem(); _vm->_sprite->_mainSprites.freeMem();
_vm->_sprite->loadList(_metaResource.mainSpritesID, _vm->_sprite->_mainSprites); _vm->_sprite->loadList(_metaResource.mainSpritesID, _vm->_sprite->_mainSprites);
_vm->_actor->loadObjList(_metaResource.objectCount, _metaResource.objectsResourceID); _vm->_actor->loadObjList(_metaResource.objectCount, _metaResource.objectsResourceID);
_vm->_resource->loadResource(resourceContext, _metaResource.cutawayListResourceID, resourcePointer, resourceLength); _vm->_resource->loadResource(resourceContext, _metaResource.cutawayListResourceID, resourcePointer, resourceLength);
@ -806,6 +807,7 @@ void Resource::loadGlobalResources(int chapter, int actorsEntrance) {
// The IHNM demo has a fixed music track and doesn't load a song table // The IHNM demo has a fixed music track and doesn't load a song table
_vm->_music->setVolume(_vm->_musicVolume == 10 ? -1 : _vm->_musicVolume * 25, 1); _vm->_music->setVolume(_vm->_musicVolume == 10 ? -1 : _vm->_musicVolume * 25, 1);
_vm->_music->play(3, MUSIC_LOOP); _vm->_music->play(3, MUSIC_LOOP);
free(resourcePointer);
} }
int voiceLUTResourceID = 0; int voiceLUTResourceID = 0;

View file

@ -79,6 +79,7 @@ SagaEngine::SagaEngine(OSystem *syst, const SAGAGameDescription *gameDesc)
_scene = NULL; _scene = NULL;
_isoMap = NULL; _isoMap = NULL;
_gfx = NULL; _gfx = NULL;
_driver = NULL;
_console = NULL; _console = NULL;
_render = NULL; _render = NULL;
_music = NULL; _music = NULL;
@ -133,6 +134,7 @@ SagaEngine::~SagaEngine() {
delete _render; delete _render;
delete _music; delete _music;
delete _sound; delete _sound;
delete _driver;
delete _gfx; delete _gfx;
delete _console; delete _console;
@ -188,11 +190,11 @@ int SagaEngine::init() {
bool native_mt32 = ((midiDriver == MD_MT32) || ConfMan.getBool("native_mt32")); bool native_mt32 = ((midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));
bool adlib = (midiDriver == MD_ADLIB); bool adlib = (midiDriver == MD_ADLIB);
MidiDriver *driver = MidiDriver::createMidi(midiDriver); _driver = MidiDriver::createMidi(midiDriver);
if (native_mt32) if (native_mt32)
driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); _driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
_music = new Music(this, _mixer, driver, _musicVolume); _music = new Music(this, _mixer, _driver, _musicVolume);
_music->setNativeMT32(native_mt32); _music->setNativeMT32(native_mt32);
_music->setAdlib(adlib); _music->setAdlib(adlib);

View file

@ -29,6 +29,7 @@
#include "engines/engine.h" #include "engines/engine.h"
#include "common/stream.h" #include "common/stream.h"
#include "sound/mididrv.h"
#include "saga/gfx.h" #include "saga/gfx.h"
#include "saga/list.h" #include "saga/list.h"
@ -531,6 +532,7 @@ public:
SndRes *_sndRes; SndRes *_sndRes;
Sound *_sound; Sound *_sound;
Music *_music; Music *_music;
MidiDriver *_driver;
Anim *_anim; Anim *_anim;
Render *_render; Render *_render;
IsoMap *_isoMap; IsoMap *_isoMap;

View file

@ -150,6 +150,7 @@ Script::~Script() {
debug(8, "Shutting down scripting subsystem."); debug(8, "Shutting down scripting subsystem.");
_mainStrings.freeMem(); _mainStrings.freeMem();
_globalVoiceLUT.freeMem();
freeModules(); freeModules();
free(_modules); free(_modules);

View file

@ -74,6 +74,9 @@ Sprite::Sprite(SagaEngine *vm) : _vm(vm) {
Sprite::~Sprite(void) { Sprite::~Sprite(void) {
debug(8, "Shutting down sprite subsystem..."); debug(8, "Shutting down sprite subsystem...");
_mainSprites.freeMem(); _mainSprites.freeMem();
_inventorySprites.freeMem();
_arrowSprites.freeMem();
_saveReminderSprites.freeMem();
free(_decodeBuf); free(_decodeBuf);
} }