Cairo и утечка памяти устраняются с помощью valgrind

В моей программе, даже если выполнять всю очевидную уборку, такую ​​как вызов cairo_destroy(), cairo_surface_destroy()..., valgrind всегда находит утечки памяти, утечки находятся в cairo зависимостях (freetype, pixman,...). Как сделать очистку после cairo, чтобы valgrind не обнаружил утечек, или утечки нормальные?

Пример вывода

==1861== HEAP SUMMARY:
==1861==     in use at exit: 1,996,663 bytes in 532 blocks
==1861==   total heap usage: 21,915 allocs, 21,383 frees, 95,411,698 bytes allocated
==1861== 
==1861== LEAK SUMMARY:
==1861==    definitely lost: 0 bytes in 0 blocks
==1861==    indirectly lost: 0 bytes in 0 blocks
==1861==      possibly lost: 0 bytes in 0 blocks
==1861==    still reachable: 1,996,663 bytes in 532 blocks
==1861==         suppressed: 0 bytes in 0 blocks
==1861== Reachable blocks (those to which a pointer was found) are not shown.
==1861== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==1861== 
==1861== For counts of detected and suppressed errors, rerun with: -v
==1861== Use --track-origins=yes to see where uninitialised values come from
==1861== ERROR SUMMARY: 1961 errors from 7 contexts (suppressed: 1 from 1)

ОБНОВИТЬ:

В этом вопросе говорится, что "утечки" нормальны, существует ли способ сделать очистку, чтобы valgrind стал счастливым?


person user1095108    schedule 30.03.2014    source источник
comment
Я не вижу никаких утечек: «определенно потеряны, косвенно потеряны, возможно потеряны: 0 байтов в 0 блоках».   -  person Martin James    schedule 31.03.2014
comment
@MartinJames Да, но в идеальном мире вся выделенная куча освобождалась бы при выходе из программы. Вот чего я хотел бы добиться.   -  person user1095108    schedule 31.03.2014
comment
Для cairo есть cairo_debug_reset_static_data().   -  person Uli Schlachter    schedule 31.03.2014
comment
@UliSchlachter Пожалуйста, сделайте это ответом.   -  person user1095108    schedule 31.03.2014


Ответы (1)


Для Каира есть cairo_debug_reset_static_data().

Когда я писал это как комментарий, я просматривал исходный код pixman и реализацию _pixman_choose_implementation(), и, по-видимому, вы не можете «очистить» pixman.

Я понятия не имею о фритайпе.

Редактировать: для fontconfig (относится к freetype, поэтому, возможно, здесь интересно) есть FcFini().

person Uli Schlachter    schedule 31.03.2014
comment
Это придется сделать, если только кто-то не придумает что-то еще лучше. - person user1095108; 31.03.2014
comment
Я создаю и связываю FreeType независимо от cairo, и когда моя программа завершается, у меня не остается доступных блоков FreeType, только блоки pixman. - person Josh Sanford; 13.01.2017