|
Serwis Edukacyjny Nauczycieli w I-LO w Tarnowie
Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy
Wałaszek |
©2026 mgr Jerzy Wałaszek
|
SDL_AllocRW
| SPIS TREŚCI |
Rozdział jest tłumaczeniem oryginalnej instrukcji dla biblioteki SDL2.
Użyj tej funkcji, aby przydzielić pamięć dla pustej, niewypełnionej struktury SDL_RWops.
SDL_RWops* SDL_AllocRW(void) |
#include "stdlib.h"
#include "SDL.h"
/* Te funkcje nie powinny być używane tylko poprzez wskaźniki w SDL_RWops */
static Sint64 mysizefunc(SDL_RWops * context)
{
return -1;
}
static Sint64 myseekfunc(SDL_RWops *context, Sint64 offset, int whence)
{
return SDL_SetError("Can't seek in this kind of SDL_RWops");
}
static size_t myreadfunc(SDL_RWops *context, void *ptr, size_t size, size_t maxnum)
{
SDL_memset(ptr,0,size*maxnum);
return maxnum;
}
static size_t mywritefunc(SDL_RWops *context, const void *ptr, size_t size, size_t num)
{
return num;
}
static int myclosefunc(SDL_RWops *context)
{
if(context->type != 0xdeadbeef)
{
return SDL_SetError("Wrong kind of SDL_RWops for myclosefunc()");
}
free(context->hidden.unknown.data1);
SDL_FreeRW(context);
return 0;
}
SDL_RWops *MyCustomRWop()
{
SDL_RWops *c=SDL_AllocRW();
if(c==NULL) return NULL;
c->size = mysizefunc;
c->seek = myseekfunc;
c->read = myreadfunc;
c->write = mywritefunc;
c->close = myclosefunc;
c->type = 0xdeadbeef;
c->hidden.unknown.data1 = malloc(256);
return c;
}
|
Musisz zwolnić pamięć wskazywaną otrzymanym wskaźnikiem za pomocą SDL_FreeRW(). W zależności oid twojego systemu operacyjnego i kompilatora, może istnieć różnica pomiędzy używanymi przez twój program funkcjami malloc() i free(), a tymi, które SDL wywołuje wewnętrznie. Próba ich mieszania może doprowadzić do zawieszenia się programu, np. przy błędach segmentacji pamięci. Ponieważ wszystkie struktury SDL_RWops muszą zwolnić zajmowaną przez nie pamięć, gdy zostanie wywołana ich metoda zamknięcia, wszystkie SDL_RWops muszą być przydzielane poprzez tę funkcję, aby mogły być poprawnie zwolnione za pomocą SDL_FreeRW().
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.