Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Liian monta vapautusta? (SDL)

teenix [17.10.2007 13:24:23]

#

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;

        }

Blaze [17.10.2007 13:39:27]

#

teenix kirjoitti:

Minulla on ongelma kun vapautan muistista kuvia.

Ja mikähän se ongelma on?

User137 [17.10.2007 14:58:25]

#

Olisiko kätevämpää pitää noita taulukossa ja vapauttaa kaikki kerralla yhdessä for silmukassa?

teenix [17.10.2007 15:21:25]

#

Siis kun otan noista osan pois, se sulkeutuu normaalisti, mutta jos on kaikki niin tulee ei vastaa ?

Ja miten niin for silmukassa?

tgunner [17.10.2007 16:49:11]

#

SDL_Surface *ook[5];
int i;
for (i=0;i<5;i++)
    SDL_FreeSurface(ook[i]);

Metabolix [18.10.2007 10:14:52]

#

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;
  }
}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta