Date:2011-07-20 13:43:25 (12 years 8 months ago)
Author:Paul Cercueil
Commit:81a607c36e49b9830a41bbd4f07288db8bdeb1b5
Message: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.
Files: src/gmenu2x.cpp (5 diffs)
src/linkapp.cpp (1 diff)
src/menu.cpp (2 diffs)
src/settingsdialog.cpp (1 diff)
src/surfacecollection.cpp (1 diff)

Change Details

src/gmenu2x.cpp
400400
401401    quit();
402402
403    free(menu);
404    free(s);
405    free(font);
403    delete menu;
404    delete font;
406405}
407406
408407void GMenu2X::quit() {
409408    fflush(NULL);
410409    sc.clear();
411    free(s);
410    delete s;
412411
413412#ifdef UNLOCK_VT
414413    SDL_QuitSubSystem(SDL_INIT_EVERYTHING & ~SDL_INIT_VIDEO);
...... 
433432    sc.del("bgmain");
434433
435434    // Load wallpaper.
436    free(bg);
435    delete bg;
437436    bg = Surface::loadImage(confStr["wallpaper"]);
438437    if (!bg) {
439438        bg = Surface::emptySurface(resX, resY);
...... 
449448    if (sd) sd->blit(bgmain, 3, bottomBarIconY);
450449    string df = getDiskFree();
451450    bgmain->write(font, df, 22, bottomBarTextY, ASFont::HAlignLeft, ASFont::VAlignMiddle);
452    free(sd);
451    delete sd;
453452
454453    Surface *volume = Surface::loadImage("imgs/volume.png", confStr["skin"]);
455454    volumeX = 27+font->getTextWidth(df);
456455    if (volume) volume->blit(bgmain, volumeX, bottomBarIconY);
457456    volumeX += 19;
458    free(volume);
457    delete volume;
459458
460459    Surface *cpu = Surface::loadImage("imgs/cpu.png", confStr["skin"]);
461460    cpuX = volumeX+font->getTextWidth("100")+5;
462461    if (cpu) cpu->blit(bgmain, cpuX, bottomBarIconY);
463462    cpuX += 19;
464463    manualX = cpuX+font->getTextWidth("300Mhz")+5;
465    free(cpu);
464    delete cpu;
466465
467466    int serviceX = resX-38;
468467    if (usbnet) {
...... 
471470                "imgs/webserver.png", confStr["skin"]);
472471            if (webserver) webserver->blit(bgmain, serviceX, bottomBarIconY);
473472            serviceX -= 19;
474            free(webserver);
473            delete webserver;
475474        }
476475        if (samba) {
477476            Surface *sambaS = Surface::loadImage(
478477                "imgs/samba.png", confStr["skin"]);
479478            if (sambaS) sambaS->blit(bgmain, serviceX, bottomBarIconY);
480479            serviceX -= 19;
481            free(sambaS);
480            delete sambaS;
482481        }
483482        if (inet) {
484483            Surface *inetS = Surface::loadImage("imgs/inet.png", confStr["skin"]);
485484            if (inetS) inetS->blit(bgmain, serviceX, bottomBarIconY);
486485            serviceX -= 19;
487            free(inetS);
486            delete inetS;
488487        }
489488    }
490489
...... 
493492
494493void GMenu2X::initFont() {
495494    if (font != NULL) {
496        free(font);
495        delete font;
497496        font = NULL;
498497    }
499498
src/linkapp.cpp
365365                    break;
366366            }
367367        }
368        free(bg);
368        delete bg;
369369        return;
370370    }
371371
src/menu.cpp
116116void Menu::freeLinks() {
117117    for (vector<linklist>::iterator section = links.begin(); section<links.end(); section++)
118118        for (linklist::iterator link = section->begin(); link<section->end(); link++)
119            free(*link);
119            delete *link;
120120}
121121
122122linklist *Menu::sectionLinks(int i) {
...... 
454454            if (link->targetExists())
455455                links[i].push_back( link );
456456            else
457                free(link);
457                delete link;
458458        }
459459    }
460460}
src/settingsdialog.cpp
4040}
4141
4242SettingsDialog::~SettingsDialog() {
43    for (uint i=0; i<voices.size(); i++)
44        free(voices[i]);
43    for (vector<MenuSetting *>::iterator it = voices.begin(); it != voices.end(); ++it)
44        delete *it;
4545}
4646
4747bool SettingsDialog::exec() {
src/surfacecollection.cpp
139139void SurfaceCollection::del(const string &path) {
140140    SurfaceHash::iterator i = surfaces.find(path);
141141    if (i != surfaces.end()) {
142        free(i->second);
142        delete i->second;
143143        surfaces.erase(i);
144144    }
145145}

Archive Download the corresponding diff file



interactive