SDL Wiki
(This is the documentation for SDL3, which is under heavy development and the API is changing! SDL2 is the current stable version!)


Use this function to allocate an empty, unpopulated SDL_RWops structure.


SDL_RWops* SDL_AllocRW(void);

Return Value

Returns a pointer to the allocated memory on success, or NULL on failure; call SDL_GetError() for more information.


Applications do not need to use this function unless they are providing their own SDL_RWops implementation. If you just need a SDL_RWops to read/write a common data source, you should use the built-in implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc.

You must free the returned pointer with SDL_FreeRW(). Depending on your operating system and compiler, there may be a difference between the malloc() and free() your program uses and the versions SDL calls internally. Trying to mix the two can cause crashing such as segmentation faults. Since all SDL_RWops must free themselves when their close method is called, all SDL_RWops must be allocated through this function, so they can all be freed correctly with SDL_FreeRW().


This function is available since SDL 3.0.0.

Code Examples

#include <stdlib.h>
#include "SDL.h"

/* These functions should not be used except from pointers in an 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)
    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()");

    return 0;

SDL_RWops *MyCustomRWop(void)
    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 = SDL_malloc(256);
    return c;

CategoryAPI, CategoryIO

[ edit | delete | history | feedback | raw ]

[ front page | index | search | recent changes | git repo | offline html ]

All wiki content is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0).
Wiki powered by ghwikipp.