The SDL forums have moved to discourse.libsdl.org.
This is just a read-only archive of the previous forums, to keep old links working.


SDL Forum Index
SDL
Simple Directmedia Layer Forums
SDL2 OPENGL SDL_RENDERER_ACCELERATED MEMORY LEAK
derekwtag


Joined: 11 Nov 2016
Posts: 1
I had a huge memory leak when using SDL_RENDERER_ACCELERATED for creating an SDL_Renderer in Ubuntu 16.04-64Bits.

The leak was shown in the System Monitor but was not detected by Valgrind.

When I replaced SDL_RENDERER_ACCELERATED flag with SDL_RENDERER_SOFTWARE flag, the memory leak disappeared.

The reason to use RENDERER_ACCELERATED flag is that it made our application run faster in displaying images continuously.

Here is a simple C program to demonstrate the issue.

main.c:

#include "SDL.h"
#include "SDL_video.h"

int main(int argc, char* argv[])
{
SDL_Window *SDLWin;
SDL_Event event;

while (1)
{
SDL_Init(SDL_INIT_VIDEO); // init video

SDLWin = SDL_CreateWindow("SDL2 Example", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 60, 40, SDL_WINDOW_OPENGL);

//SDLWin = SDL_CreateWindow("SDL2 Example", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 60, 40, 0); //changing the flag from SDL_WINDOW_OPENGL to 0 does not eliminate the memory leak

SDL_Renderer* SDlRenderer = SDL_CreateRenderer(SDLWin, -1, SDL_RENDERER_ACCELERATED ); //cause a huge memory leak!

//SDL_Renderer* SDlRenderer = SDL_CreateRenderer(SDLWin, -1, SDL_RENDERER_SOFTWARE); //no memory leak

SDL_DestroyRenderer(SDlRenderer);

while (SDL_PollEvent(&event))
{
switch( event.type )
{
case SDL_WINDOWEVENT:
//printf("SDL_WINDOWEVENT\n");
break;
case SDL_KEYDOWN:
printf("SDL_KEYDOWN\n");
break;
case SDL_QUIT:
printf("SDL_QUIT\n");
break;
default:
printf("event type = %d\n", event.type);
break;
}
}

SDL_DestroyWindow(SDLWin);
SDL_QuitSubSystem(SDL_INIT_VIDEO);
SDL_Quit();
SDL_Delay(500);
}

return 0;
}

Makefile:

INCLUDES = -I/usr/include/SDL2

CFLAGS = -g -Wall -Werror -std=c11 $(INCLUDES)

LD = gcc
LDFLAGS =
LDLIBS = -L/usr/lib/x86_64-linux-gnu -lSDL2

SOURCES = main.c
OUT = sdl_opengl

.PHONY: all

all: $(OUT)

$(OUT): $(patsubst %.c,%.o,$(SOURCES))
$(LD) $(LDFLAGS) -o $@ $? $(LDLIBS)

clean:
rm *.o $(OUT)
nc-pv


Joined: 06 Jan 2017
Posts: 3
I am experiencing the same.

Did you try to measure the memory consumption? Will it just keep growing beyond any limits?