allegro5
allegro5 copied to clipboard
Memory leak when using al_create_display
Hello,
when trying to write a basic program, valgrind shows me some memory leaks. Seems some elements created in function _al_xglx_config_create_context are not freed.
I guess it is coming from there : https://github.com/liballeg/allegro5/blob/4aa54e6c994af21bc63d8b593673ab3df62390f8/src/x/xglx_config.c#L579
This is exactly the same issue as someone wrote in February 2019 here: https://stackoverflow.com/questions/54581121/c-allegro-5-memory-leaks-valgrind
HEAP SUMMARY:
in use at exit: 67,431 bytes in 739 blocks
total heap usage: 22,372 allocs, 21,633 frees, 29,166,516 bytes allocated
32 bytes in 1 blocks are definitely lost in loss record 11 of 80
at 0x483C7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
by 0x63B1421: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
by 0x52BF73B: glXCreateWindow (in /usr/lib/x86_64-linux-gnu/libGLX.so.0.0.0)
by 0x4915065: _al_xglx_config_create_context (in /usr/lib/x86_64-linux-gnu/liballegro.so.5.2.6)
by 0x49110B4: ??? (in /usr/lib/x86_64-linux-gnu/liballegro.so.5.2.6)
by 0x48BB05C: al_create_display (in /usr/lib/x86_64-linux-gnu/liballegro.so.5.2.6)
by 0x10AA78: GraphicsManager::initAll() (GraphicsManager.cpp:50)
by 0x10A86F: GraphicsManager::GraphicsManager() (GraphicsManager.cpp:13)
by 0x11CA7C: main_launch(char const*, char const*, bool) (main.cpp:34)
by 0x11CF99: main (main.cpp:47)
3,388 (400 direct, 2,988 indirect) bytes in 1 blocks are definitely lost in loss record 75 of 80
at 0x483ED99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
by 0x63C0864: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
by 0x63B1006: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
by 0x63B1501: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
by 0x52BF73B: glXCreateWindow (in /usr/lib/x86_64-linux-gnu/libGLX.so.0.0.0)
by 0x4915065: _al_xglx_config_create_context (in /usr/lib/x86_64-linux-gnu/liballegro.so.5.2.6)
by 0x49110B4: ??? (in /usr/lib/x86_64-linux-gnu/liballegro.so.5.2.6)
by 0x48BB05C: al_create_display (in /usr/lib/x86_64-linux-gnu/liballegro.so.5.2.6)
by 0x10AA78: GraphicsManager::initAll() (GraphicsManager.cpp:50)
by 0x10A86F: GraphicsManager::GraphicsManager() (GraphicsManager.cpp:13)
by 0x11CA7C: main_launch(char const*, char const*, bool) (main.cpp:34)
by 0x11CF99: main (main.cpp:47)
Using:
Linux hpwhitedev 5.8.0-55-generic #62-Ubuntu SMP Tue Jun 1 08:21:18 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
allegro5-doc groovy,groovy 2:5.2.6.0-2 all [installed]
liballegro-acodec5-dev groovy 2:5.2.6.0-2 amd64 [installed]
liballegro-acodec5.2 groovy 2:5.2.6.0-2 amd64 [installed]
liballegro-audio5-dev groovy 2:5.2.6.0-2 amd64 [installed]
liballegro-audio5.2 groovy 2:5.2.6.0-2 amd64 [installed]
liballegro-dialog5-dev groovy 2:5.2.6.0-2 amd64 [installed]
liballegro-dialog5.2 groovy 2:5.2.6.0-2 amd64 [installed]
liballegro-image5-dev groovy 2:5.2.6.0-2 amd64 [installed]
liballegro-image5.2 groovy 2:5.2.6.0-2 amd64 [installed]
liballegro-physfs5-dev groovy 2:5.2.6.0-2 amd64 [installed]
liballegro-physfs5.2 groovy 2:5.2.6.0-2 amd64 [installed]
liballegro-ttf5-dev groovy 2:5.2.6.0-2 amd64 [installed]
liballegro-ttf5.2 groovy 2:5.2.6.0-2 amd64 [installed]
liballegro-video5-dev groovy 2:5.2.6.0-2 amd64 [installed]
liballegro-video5.2 groovy 2:5.2.6.0-2 amd64 [installed]
liballegro5-dev groovy 2:5.2.6.0-2 amd64 [installed]
liballegro5.2 groovy 2:5.2.6.0-2 amd64 [installed]
libc6 groovy 2.32-0ubuntu3 amd64 [installed]
libglx0 groovy 1.3.2-1 amd64 [installed]
libopengl0 groovy 1.3.2-1 amd64 [installed]
libx11-6 groovy-updates,groovy-security 2:1.6.12-1ubuntu0.1 amd64 [installed]
libxcursor1 groovy 1:1.2.0-2 amd64 [installed]
libxi6 groovy 2:1.7.10-1 amd64 [installed]
libxinerama1 groovy 2:1.1.4-2 amd64 [installed]
libxpm4 groovy 1:3.5.12-1 amd64 [installed]
libxrandr2 groovy 2:1.5.2-0ubuntu1 amd64 [installed]
Please find in attachment more info AllegroError.txt AllegroErrorAdvanced.txt AllegroInfo.txt
Thanks for investigating hoping it will help many others
Adding some details:
Of course my code super simplified looks like this:
al_init();
...
this->screen = al_create_display(800, 800);
...
/* almost doing nothing, I mean just jumping between class methods and the main */
...
al_destroy_display(this->screen);
Compiling with:
g++ -g3 *.cpp -W -Wextra -Wall -Werror -fno-stack-protector -lallegro