LAB: Fix a memory leak in the Image class

This commit is contained in:
Filippos Karapetis 2015-12-18 14:19:58 +02:00 committed by Willem Jan Palenstijn
parent 5c480485d4
commit f1bb844e90
3 changed files with 9 additions and 6 deletions

View file

@ -1229,8 +1229,7 @@ int LabEngine::followCrumbs() {
void LabEngine::mayShowCrumbIndicator() { void LabEngine::mayShowCrumbIndicator() {
static byte dropCrumbs[] = { 0x00 }; static Image dropCrumbsImage(24, 24, nullptr, this);
static Image dropCrumbsImage(24, 24, dropCrumbs, this);
if (getPlatform() != Common::kPlatformWindows) if (getPlatform() != Common::kPlatformWindows)
return; return;
@ -1242,8 +1241,7 @@ void LabEngine::mayShowCrumbIndicator() {
} }
void LabEngine::mayShowCrumbIndicatorOff() { void LabEngine::mayShowCrumbIndicatorOff() {
static byte dropCrumbsOff[] = { 0x00 }; static Image dropCrumbsOffImage(24, 24, nullptr, this);
static Image dropCrumbsOffImage(24, 24, dropCrumbsOff, this);
if (getPlatform() != Common::kPlatformWindows) if (getPlatform() != Common::kPlatformWindows)
return; return;

View file

@ -49,10 +49,14 @@ Image::Image(Common::File *s, LabEngine *vm) : _vm(vm) {
if (size & 1) if (size & 1)
size++; size++;
_imageData = new byte[size]; // FIXME: Memory leak! _imageData = new byte[size];
s->read(_imageData, size); s->read(_imageData, size);
} }
Image::~Image() {
delete _imageData;
}
/** /**
* Blits a piece of one image to another. * Blits a piece of one image to another.
*/ */

View file

@ -47,9 +47,10 @@ public:
uint16 _height; uint16 _height;
byte *_imageData; byte *_imageData;
Image(LabEngine *vm) : _width(0), _height(0), _imageData(0), _vm(vm) {} Image(LabEngine *vm) : _width(0), _height(0), _imageData(nullptr), _vm(vm) {}
Image(int w, int h, byte *d, LabEngine *vm) : _width(w), _height(h), _imageData(d), _vm(vm) {} Image(int w, int h, byte *d, LabEngine *vm) : _width(w), _height(h), _imageData(d), _vm(vm) {}
Image(Common::File *s, LabEngine *vm); Image(Common::File *s, LabEngine *vm);
virtual ~Image();
void drawImage(uint16 x, uint16 y); void drawImage(uint16 x, uint16 y);
void drawMaskImage(uint16 x, uint16 y); void drawMaskImage(uint16 x, uint16 y);