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 |
©2023 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 ©2023 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: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.