T
Nexus schrieb:
Ich könnte mir vorstellen, dass ich etwas aus dem Speicher nicht gelöscht habe, doch wie es genau funktionieren könnte, weiss ich leider nicht. Muss mit SDL_FreeSurface den Grafikspeicher wieder freigegeben werden (wenn ja, bei welchen Surfaces; ich hab z.B. screen, bild)? Bis jetzt hab ich das eigentlich nie gemacht, ich hatte auch nie Probleme...
Ja, tu das mal. Alle geladenen Surfaces, Fonts etc wieder freigeben ist schon noch wichtig. Ausserdem solltest du SDL richtig beenden.
Alle SDL Funktionen geben bei Fehlern eine exit-code zurück und ausserdem kannst du die Fehler mit SDL_GetError() abfragen.
Fehlerbehandlung ist in SDL nicht zu schwer:
int SDL_main( int argc, char* argv[] )
{
try
{
SDL_Surface* Screen = NULL ;
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
throw SDL_GetError() ;
Screen = SDL_SetVideoMode( 640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF ) ;
if( Screen == NULL )
throw SDL_GetError() ;
// code here
}
catch( char* strError )
{
cerr << strError << '\n' ;
}
SDL_Quit() ;
return 0 ;
}
// Loads Mario.png into an SDL_Surface
SDL_Surface* imgMario = IMG_Load( "assets/Mario.png" ) ;
if( imgMario == NULL ) // Check for validity.
throw IMG_GetError() ; // Same as SDL_GetError but reports problems with image files.
DrawImage( imgMario, 0, 0, Screen ) ; // Invoke the drawing function we made earlier.
SDL_FreeSurface( imgMario ) ; // Deletes the surface at the end of the program.
Quelle: http://www.devmaster.net/wiki/SDL_Lesson_1:_The_Foundation#The_Images