戻る


SDL_FreeSurface

サーフェスを解放する。

使い方

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()で確実に解放する。

(解放しないとメモリリークの原因になる。)

関連項目