C++ GTKMM在简单应用程序中泄漏内存

C++ GTKMM在简单应用程序中泄漏内存,c++,memory-leaks,visual-studio-2019,gtkmm,vcpkg,C++,Memory Leaks,Visual Studio 2019,Gtkmm,Vcpkg,我已经通过vcpkg安装了gtkmm。(gtkmm 3.22.2-2和gtk 3.22.19-3)如果我尝试编译中提供的简单示例。它在执行结束时显示内存泄漏。有人说它没有泄漏,gnome故意将分配的资源释放给操作系统作为一种优化。Debian使用valgrind时也存在类似的问题。我不能用gnome optimizaton来区分真正的漏洞。。。我想学习如何正确退出gnome应用程序。下面是我使用CRT memdebug实用程序检查泄漏的方法 #include <gtkmm.h> #

我已经通过vcpkg安装了gtkmm。(gtkmm 3.22.2-2和gtk 3.22.19-3)如果我尝试编译中提供的简单示例。它在执行结束时显示内存泄漏。有人说它没有泄漏,gnome故意将分配的资源释放给操作系统作为一种优化。Debian使用valgrind时也存在类似的问题。我不能用gnome optimizaton来区分真正的漏洞。。。我想学习如何正确退出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;
}
#包括
#定义\u CRTDBG\u映射\u ALLOC
#包括
#包括
#ifdef_调试
#定义DBG_NEW NEW(_NORMAL_BLOCK、_FILE、_LINE)
#否则
#定义DBG_NEW NEW
#恩迪夫
int main(int argc,char*argv[])
{
_CRTSETDBG标志(_CRTDBG_ALLOC_MEM_DF|u CRTDBG_LEAK_CHECK_DF);
{
auto-app=Gtk::Application::create(argc,argv,“org.gtkmm.examples.base”);
Gtk::窗口窗口;
设置默认大小(200200);
应用程序->运行(窗口);
}
返回0;
}
有一个用于Valgrind的报告,涵盖了GTK内部的任何误报泄漏。GLib和GTKMM使用的其他库也有类似的文件。您将不得不以某种方式使它们适应您正在使用的内存调试工具

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