Minulla on ongelma kun vapautan muistista kuvia. Onko niitä liikaa ?
if(peli == 666){ SDL_FreeSurface(keho); SDL_FreeSurface(nassu); SDL_FreeSurface(nassu1); SDL_FreeSurface(nassu2); SDL_FreeSurface(nassu3); SDL_FreeSurface(suu); SDL_FreeSurface(suu1); SDL_FreeSurface(suu2); SDL_FreeSurface(suu3); SDL_FreeSurface(mainb); SDL_FreeSurface(huone); SDL_FreeSurface(huone1); SDL_FreeSurface(huone2); SDL_FreeSurface(huone3); SDL_FreeSurface(puhelin); SDL_FreeSurface(puhelin1); SDL_FreeSurface(puhelin2); SDL_FreeSurface(sos1); SDL_FreeSurface(ves1); SDL_FreeSurface(hap1); SDL_FreeSurface(ruo1); SDL_FreeSurface(sos2); SDL_FreeSurface(ves2); SDL_FreeSurface(hap2); SDL_FreeSurface(ruo2); SDL_FreeSurface(wc1); SDL_FreeSurface(wc2); SDL_FreeSurface(juliste); SDL_FreeSurface(jaakaappi); SDL_FreeSurface(jaakaappi1); SDL_FreeSurface(jaakaappi2); SDL_FreeSurface(back); SDL_CloseAudio(); SDL_Quit(); return 0; }
teenix kirjoitti:
Minulla on ongelma kun vapautan muistista kuvia.
Ja mikähän se ongelma on?
Olisiko kätevämpää pitää noita taulukossa ja vapauttaa kaikki kerralla yhdessä for silmukassa?
Siis kun otan noista osan pois, se sulkeutuu normaalisti, mutta jos on kaikki niin tulee ei vastaa ?
Ja miten niin for silmukassa?
SDL_Surface *ook[5]; int i; for (i=0;i<5;i++) SDL_FreeSurface(ook[i]);
Ohjelmat eivät jumita koodin määrään vaan siihen, jos koodissa on jokin virhe. Tuossa tapauksessa olet luultavasti tehnyt virheen jossain aivan muualla kuin tuossa näkyvässä koodissa. Ehkäpä olet unohtanut ladata jonkin kuvan ja yrität silti vapauttaa sitä?
Pitkä koodi ei ole automaattisesti viallinen, mutta usein se on kuitenkin tyhmästi tehty, kuten jo todettiin. Taulukot ja silmukat lyhentävät ja selkeyttävät koodia huimasti. Jos aivan välttämättä haluat nimetä kuvasi jotenkin noin ohjelman sisällä, niin tässä on yksi mahdollinen ratkaisu:
enum KUVIEN_NIMET { JAAKAAPPI_1, // = 0 JAAKAAPPI_2, // = 1 // Tähän väliin lisää nimiä HUONE_1, HUONE_2, // = n-1 KUVIEN_MAARA // = n }; SDL_Surface *kuvat[KUVIEN_MAARA] = {0}; // Taulukollinen kuvia // Lataus kuvat[JAAKAAPPI_1] = SDL_LoadBMP("jaakaappi1.bmp"); // Vapautus for (i = 0; i < KUVIEN_MAARA; ++i) { if (kuvat[i] != 0) { SDL_FreeSurface(kuvat[i]); kuvat[i] = 0; } }
Aihe on jo aika vanha, joten et voi enää vastata siihen.