我准备了头文件“heap_monitor.h”。这个标题工作,如果我将其包含在其他一些头文件中,它会检查此标头和cpp文件中的任何内存泄漏。 当我忘记在析构函数中删除对象时,它们会保留在堆中,并且此监视器会向我发送错误,我知道在哪里我不会在堆中释放内存。
#pragma once
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define new new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
#define initHeapMonitor() _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF)
这个版本的代码包括crtdbg.h,它是Windows库。 在Xcode代码我不编译这个错误:
错误:'未找到'crtdbg.h'文件
我必须编写一些其他代码来检查这些内存泄漏或某些东西来修复程序,以便在没有这个的情况下编译我的工作。
当我删除crtdbg.h x代码时,在new.cpp中发送20个错误: https://prnt.sc/iv1x7d
知道某人如何解决这个问题?
答案 0 :(得分:1)
据我所知,搜索内存泄漏的最佳方法是使用名为Valgrind的工具,只需使用memcheck命令即可。你可以在这里看到详细信息:http://valgrind.org/docs/manual/mc-manual.html 对于macOS,您可以看到线程Valgrind on macOS Sierra
答案 1 :(得分:0)
http://valgrind.org/downloads/current.html Valgrind是查找mac c ++开发内存泄漏的最佳方法。