Dies sind die Gegenstücke von SDL_free, aller Speicher der mit folgenden 3 Funktionen reserviert wurde, muss damit frei gegeben werden. Vielfach ist die bei Funktionen der Fall, welche einen PChar retour geben. Da muss man in der Doku von SDL3 schauen.
Aber Achtung, es ist NICHT kompatibel zu GetMem und FreeMem.
Code: Alles auswählen
function SDL_malloc(size: Tsize_t): pointer; cdecl; external libSDL3;
function SDL_calloc(nmemb: Tsize_t; size: Tsize_t): pointer; cdecl; external libSDL3;
function SDL_realloc(mem: pointer; size: Tsize_t): pointer; cdecl; external libSDL3;
procedure SDL_free(mem: pointer); cdecl; external libSDL3;
Dann ist ja soweit klar, ich muss die Resource mit SDL_Destroy(..) manuell aus dem Speicher freigeben wenn sie nicht mehr benötigt und das zwingend beim Verlassen des Programms.
Dies sind alles sogenannte struct Pointer, der Fachbegriff Opaque Pointers. Die meisten C-Bindungen bauen darauf auf, welch C keine echte Objektorientierung kennt. Der Pointer der du da bekommst zeigt intern auf eine private struct/record. Sobald du ZB. SDL_CreateWindow aufrufst, wie der Speicher für diese struct intern mit SDL_Malloc reserviert, ähnlich eines Contructors. und mit SDL_DestroWindows, wird dieser interne Speicher wieder aufgeräumt, wie in einem Destructor, die struct slebst wird dann intern mit SDL_free frei gegeben.
Ich hoffe du verstehst was ich meine.
Das beste Beispiel von einer Opaque Pointers: Programmierung ist die glib2.