サーフェスを解放する。
void SDL_FreeSurface(SDL_Surface* surface);
surfaceには解放するサーフェスを指定する。
ビデオサーフェス(SDL_GetVideoSurface()で取得したもの)は解放してはいけない。
↓サンプルで使用している画像
#include <SDL/SDL.h> #include <SDL/SDL_image.h> int main(){ /* ビデオサーフェス */ SDL_Surface* videoSurface = NULL; /* イメージサーフェス */ SDL_Surface* imageSurface = NULL; /* 転写先矩形 */ SDL_Rect rect; /* 初期化処理 */ SDL_Init(SDL_INIT_EVERYTHING); /* ウインドウオープン */ SDL_SetVideoMode(640, 480, 0, SDL_HWSURFACE | SDL_DOUBLEBUF); /* ビデオサーフェスの取得 */ videoSurface = SDL_GetVideoSurface(); /* 画像の読み込み */ imageSurface = IMG_Load("penguin_mgc_pic.jpg"); rect.x = 100; rect.y = 15; /* 画像をビデオサーフェスに転写 */ SDL_BlitSurface(imageSurface, &(imageSurface->clip_rect), videoSurface, &rect); /* イメージサーフェスの削除 */ SDL_FreeSurface(imageSurface); /* 二重で削除するとエラーになる。 */ /* SDL_FreeSurface(imageSurface); */ /* NULLを指定してもエラーにならない。 */ SDL_FreeSurface(NULL); /* だから、サーフェスを使いまわす場合は、SDL_FreeSurface()後にNULLをセットしておくと安心。 */ imageSurface = NULL; SDL_FreeSurface(imageSurface); /* ←エラーにならない */ /* フリップ */ SDL_Flip(videoSurface); /* 3秒ウエイト */ SDL_Delay(3000); /* 終了処理 */ SDL_Quit(); return 0; }
プログラムの説明はIMG_Loadを参照。
画像の読み込みなどでサーフェスを作成した場合、それが不要になったら、SDL_FreeSurface()で確実に解放する。
(解放しないとメモリリークの原因になる。)