VS(Visual Studio)中检测内存泄露

最近写了一个从二进制文件中查找函数的库需要放到服务端,于是要解决内存泄露的问题,首先测试

添加头文件:

#define CRTDBG_MAP_ALLOC 
#include <crtdbg.h>

在 mian 函数结尾使用

_CrtDumpMemoryLeaks();

测试程序:


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

int main()
{
    char *a = (char*)malloc(12);
    BYTE* b = new BYTE[22];

    HANDLE hHeap = NULL;
    __dword dwOldProtect = 0;
    hHeap = GetProcessHeap();
    auto c = (__void *)HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 33);

    _CrtDumpMemoryLeaks();
}

在这里插入图片描述
这里可以明显看出 HeapAlloc 出现的内存分配并没有被捕获,
添加函数:VirtualAlloc 测试一下,

    char *a = (char*)malloc(12);
    BYTE* b = new BYTE[22];

    LPVOID c = VirtualAlloc(NULL, 27, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    memset(c, 0x90, 27);

    HANDLE hHeap = NULL;
    __dword dwOldProtect = 0;
    hHeap = GetProcessHeap();
    auto d = (__void *)HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 44);

    _CrtDumpMemoryLeaks();

    std::cout << "Hello World!\n"; 

在这里插入图片描述
发现依然是没有检测到函数的内存分配,目前只能是先测试一下 malloc 和new 分配的内存情况

在项目中使用:

添加:

   _CrtDumpMemoryLeaks();
   AnalyzePdb(FilePath, FilePdbInfo);
   _CrtDumpMemoryLeaks();

在这里插入图片描述
根据提示,在设置一个断点以查找分配内存中的错误:

   _CrtSetBreakAlloc(104);
   _CrtDumpMemoryLeaks();
   AnalyzePdb(FilePath, FilePdbInfo);
   _CrtDumpMemoryLeaks();

断点成功中断下来:
在这里插入图片描述
查看堆栈定位未分配内存处:
在这里插入图片描述
发现是创建链表头处分配了内存忘记释放,至此就查找到了内存泄露的地方。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值