c++ Allegro 5 - утечки памяти (valgrind)

Я пытаюсь написать простую игру с библиотекой allegro.cc, и в начале у меня есть утечки памяти, обнаруженные valgrind. Может ли кто-нибудь сказать мне, что я делаю неправильно? Я не верю, что у аллегро есть утечки памяти. Код:

#include <stdio.h>
#include <stdlib.h>
#include <allegro5/allegro.h>

int main(int argc, char** argv)
{
    printf("start\n");

    if (!al_init()) 
        exit(EXIT_FAILURE);

    ALLEGRO_DISPLAY *display = al_create_display(100, 100);
    if (display == NULL) 
        exit(EXIT_FAILURE);

    al_destroy_display(display);
    al_uninstall_system();

    return EXIT_SUCCESS;
}

Я запускаю его на Linux Ubuntu 16.04.

Команда для компиляции кода: gcc -Wall test.c -o test.o $(pkg-config --libs allegro-5)

Команда для запуска valgrind: valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./test.o

Журналы Valgrind:

LEAK SUMMARY:
==28629==    definitely lost: 88 bytes in 2 blocks
==28629==    indirectly lost: 2,668 bytes in 10 blocks
==28629==      possibly lost: 0 bytes in 0 blocks
==28629==    still reachable: 121,860 bytes in 675 blocks
==28629==         suppressed: 0 bytes in 0 blocks
==28629== Reachable blocks (those to which a pointer was found) are not shown.
==28629== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==28629==
==28629== For counts of detected and suppressed errors, rerun with: -v
==28629== ERROR SUMMARY: 388 errors from 325 contexts (suppressed: 0 from 0)

person user    schedule 07.02.2019    source источник
comment
Не связано, но по соглашению .o используется для объектных файлов, а не для исполняемых файлов.   -  person Eugene Sh.    schedule 07.02.2019
comment
на первый взгляд не кажется, что в вашем коде происходит утечка памяти. Я бы попросил об этом более конкретно на форуме аллегро   -  person Fabiotk    schedule 08.02.2019
comment
У вас есть подробности об утечках из журналов? -v проливает свет?   -  person Paul Floyd    schedule 11.02.2019


Ответы (1)


valgrind сообщает о 160 потерянных байтах в 2 блоках. Один 32 байта, другой 128 напрямую теряется. Это на Ubuntu 18.04 с Allegro 5.2.5. Вы можете увидеть их ниже:

Allegro сообщает, что память утекла, но это может быть ничего. Я посмотрю на это. С вашим собственным кодом все в порядке, так что пока не беспокойтесь об утечках памяти.

==23579== 32 bytes in 1 blocks are definitely lost in loss record 386 of 1,647
==23579==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==23579==    by 0x11B596A1: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
==23579==    by 0x67DBA07: glXCreateWindow (in /usr/lib/x86_64-linux-gnu/libGLX.so.0.0.0)
==23579==    by 0x4F49B18: _al_xglx_config_create_context (xglx_config.c:572)
==23579==    by 0x4F4328F: xdpy_create_display_locked (xdisplay.c:464)
==23579==    by 0x4F43A57: xdpy_create_display (xdisplay.c:614)
==23579==    by 0x4EB5D1D: al_create_display (display.c:53)
==23579==    by 0x108978: main (gtktest.c:17)


==23579== 1,960 (128 direct, 1,832 indirect) bytes in 1 blocks are definitely lost in loss record 1,626 of 1,647
==23579==    at 0x4C31B25: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==23579==    by 0x11B7C93A: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
==23579==    by 0x11B59171: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
==23579==    by 0x11B5977C: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
==23579==    by 0x67DBA07: glXCreateWindow (in /usr/lib/x86_64-linux-gnu/libGLX.so.0.0.0)
==23579==    by 0x4F49B18: _al_xglx_config_create_context (xglx_config.c:572)
==23579==    by 0x4F4328F: xdpy_create_display_locked (xdisplay.c:464)
==23579==    by 0x4F43A57: xdpy_create_display (xdisplay.c:614)
==23579==    by 0x4EB5D1D: al_create_display (display.c:53)
==23579==    by 0x108978: main (gtktest.c:17)

person BugSquasher    schedule 24.03.2019