【问题标题】:GTKMM leaking memory in a simple applicationGTKMM 在一个简单的应用程序中泄漏内存
【发布时间】:2020-01-22 09:30:33
【问题描述】:

我已经通过 vcpkg 安装了 gtkmm。 (gtkmm 3.22.2-2 和 gtk 3.22.19-3)如果我尝试编译gnome tutorials 中提供的简单示例。它在执行结束时显示内存泄漏。有人说它不是泄漏,gnome 故意将分配的资源释放给操作系统作为优化。还有一个类似的问题reported 在 Debian 中使用 valgrind。好吧,我无法通过 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;
}

【问题讨论】:

    标签: c++ memory-leaks visual-studio-2019 gtkmm vcpkg


    【解决方案1】:

    Valgrind 有一个suppression file,它涵盖了 GTK 内部的任何误报泄漏。 GLib 和 GTKMM 使用的其他库也有类似的文件。您必须以某种方式调整这些以适应您正在使用的内存调试工具。

    还要确保您已设置环境变量G_SLICE=always-malloc,否则 GLib 的内部分配器使用的块将被视为泄漏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 2017-08-24
      • 2015-08-14
      • 2012-05-25
      相关资源
      最近更新 更多