Serwis Edukacyjny
Nauczycieli
w I-LO w Tarnowie

obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: mgr Jerzy Wałaszek
Uaktualniono: 31.07.2022

©2022 mgr Jerzy Wałaszek
I LO w Tarnowie

Interfejs SDL2:

SDL_AllocRW

SPIS TREŚCI

Rozdział jest tłumaczeniem oryginalnej instrukcji dla biblioteki SDL2.

SDL_AllocRW

Użyj tej funkcji, aby przydzielić pamięć dla pustej, niewypełnionej struktury SDL_RWops.

Składnia

SDL_RWops* SDL_AllocRW(void)

Wartość zwracana

Zwraca wskaźnik do przydzielonej pamięci lub NULL przy błędzie; wywołaj funkcję SDL_GetError(), aby otrzymać więcej informacji.

Przykładowy kod

#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;
}

Uwagi

Aplikacje nie mają potrzeby korzystania z tej funkcji, chyba że dostarczają swojej własnej implementacji SDL_RWops. Jeśli tylko potrzebujesz SDL_RWops do odczytu/zapisu do wspólnego źródła danych, powinieneś korzystać z wbudowanych w SDL implementacji takich, jak SDL_RWFromFile() lub SDL_RWFromMem() i podobnych.

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().

Powiązane funkcje

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2022 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.