GTKMM утечка памяти в простом приложении - PullRequest
0 голосов
/ 22 января 2020

Я установил gtkmm через vcpkg. (gtkmm 3.22.2-2 и gtk 3.22.19-3) Если я попытаюсь скомпилировать простой пример, приведенный в gnome tutorials . Это показывает утечку памяти в конце выполнения. Некоторые люди говорят, что это не утечка, gnome намеренно оставляет высвобождение выделенных ресурсов операционной системе в качестве оптимизации. И похожая проблема сообщила в Debian с использованием valgrind. Ну, я не могу отличить guish настоящие утечки с оптимизацией gnome ... Я хочу узнать, как правильно выйти из приложения gnome. Вот мой способ проверки утечек с помощью утилит CRT memdebug.

#include <gtkmm.h>

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

#ifdef _DEBUG
#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
#else
#define DBG_NEW new
#endif

int main(int argc, char* argv[])
{
  _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
  {
    auto app = Gtk::Application::create(argc, argv, "org.gtkmm.examples.base");

    Gtk::Window window;
    window.set_default_size(200, 200);

    app->run(window);
  }

  return 0;
}

1 Ответ

0 голосов
/ 27 января 2020

Для Valgrind имеется файл подавления , который покрывает любые ложноположительные утечки внутри GTK. Есть аналогичные файлы для GLib и других библиотек, используемых GTKMM. Вам придется как-то адаптировать их к используемому вами инструменту отладки памяти.

Также убедитесь, что вы установили переменную окружения G_SLICE=always-malloc, потому что в противном случае блоки, используемые внутренним распределителем GLib, будут считаться утечками.

...