From 81a607c36e49b9830a41bbd4f07288db8bdeb1b5 Mon Sep 17 00:00:00 2001 From: Ayla Date: Wed, 20 Jul 2011 13:43:25 +0200 Subject: [PATCH] Fixed a good number of memory leaks. The objects created with "new" were destroyed with "free()", instead of "delete"; as a result, the destructors were never called. --- src/gmenu2x.cpp | 23 +++++++++++------------ src/linkapp.cpp | 2 +- src/menu.cpp | 4 ++-- src/settingsdialog.cpp | 4 ++-- src/surfacecollection.cpp | 2 +- 5 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/gmenu2x.cpp b/src/gmenu2x.cpp index aa15140..a8ef44b 100644 --- a/src/gmenu2x.cpp +++ b/src/gmenu2x.cpp @@ -400,15 +400,14 @@ GMenu2X::~GMenu2X() { quit(); - free(menu); - free(s); - free(font); + delete menu; + delete font; } void GMenu2X::quit() { fflush(NULL); sc.clear(); - free(s); + delete s; #ifdef UNLOCK_VT SDL_QuitSubSystem(SDL_INIT_EVERYTHING & ~SDL_INIT_VIDEO); @@ -433,7 +432,7 @@ void GMenu2X::initBG() { sc.del("bgmain"); // Load wallpaper. - free(bg); + delete bg; bg = Surface::loadImage(confStr["wallpaper"]); if (!bg) { bg = Surface::emptySurface(resX, resY); @@ -449,20 +448,20 @@ void GMenu2X::initBG() { if (sd) sd->blit(bgmain, 3, bottomBarIconY); string df = getDiskFree(); bgmain->write(font, df, 22, bottomBarTextY, ASFont::HAlignLeft, ASFont::VAlignMiddle); - free(sd); + delete sd; Surface *volume = Surface::loadImage("imgs/volume.png", confStr["skin"]); volumeX = 27+font->getTextWidth(df); if (volume) volume->blit(bgmain, volumeX, bottomBarIconY); volumeX += 19; - free(volume); + delete volume; Surface *cpu = Surface::loadImage("imgs/cpu.png", confStr["skin"]); cpuX = volumeX+font->getTextWidth("100")+5; if (cpu) cpu->blit(bgmain, cpuX, bottomBarIconY); cpuX += 19; manualX = cpuX+font->getTextWidth("300Mhz")+5; - free(cpu); + delete cpu; int serviceX = resX-38; if (usbnet) { @@ -471,20 +470,20 @@ void GMenu2X::initBG() { "imgs/webserver.png", confStr["skin"]); if (webserver) webserver->blit(bgmain, serviceX, bottomBarIconY); serviceX -= 19; - free(webserver); + delete webserver; } if (samba) { Surface *sambaS = Surface::loadImage( "imgs/samba.png", confStr["skin"]); if (sambaS) sambaS->blit(bgmain, serviceX, bottomBarIconY); serviceX -= 19; - free(sambaS); + delete sambaS; } if (inet) { Surface *inetS = Surface::loadImage("imgs/inet.png", confStr["skin"]); if (inetS) inetS->blit(bgmain, serviceX, bottomBarIconY); serviceX -= 19; - free(inetS); + delete inetS; } } @@ -493,7 +492,7 @@ void GMenu2X::initBG() { void GMenu2X::initFont() { if (font != NULL) { - free(font); + delete font; font = NULL; } diff --git a/src/linkapp.cpp b/src/linkapp.cpp index 6fa1f5c..f562424 100644 --- a/src/linkapp.cpp +++ b/src/linkapp.cpp @@ -365,7 +365,7 @@ void LinkApp::showManual() { break; } } - free(bg); + delete bg; return; } diff --git a/src/menu.cpp b/src/menu.cpp index c93ad61..3c3748c 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -116,7 +116,7 @@ void Menu::loadIcons() { void Menu::freeLinks() { for (vector::iterator section = links.begin(); sectionbegin(); linkend(); link++) - free(*link); + delete *link; } linklist *Menu::sectionLinks(int i) { @@ -454,7 +454,7 @@ void Menu::readLinks() { if (link->targetExists()) links[i].push_back( link ); else - free(link); + delete link; } } } diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp index e4b0bb3..49837a0 100644 --- a/src/settingsdialog.cpp +++ b/src/settingsdialog.cpp @@ -40,8 +40,8 @@ SettingsDialog::SettingsDialog( } SettingsDialog::~SettingsDialog() { - for (uint i=0; i::iterator it = voices.begin(); it != voices.end(); ++it) + delete *it; } bool SettingsDialog::exec() { diff --git a/src/surfacecollection.cpp b/src/surfacecollection.cpp index aa63b4b..8d4b970 100644 --- a/src/surfacecollection.cpp +++ b/src/surfacecollection.cpp @@ -139,7 +139,7 @@ Surface *SurfaceCollection::addSkinRes(const string &path, bool useDefault) { void SurfaceCollection::del(const string &path) { SurfaceHash::iterator i = surfaces.find(path); if (i != surfaces.end()) { - free(i->second); + delete i->second; surfaces.erase(i); } }