VS环境下查内存泄露

在调试的时候,我们有时候看到c++程序有内存泄露,但是VS没有显示具体是哪个文件的哪行代码,有时候什么都没有显示,这个问题怎么解决呢?

1. 如下代码执行后,VS根本就没有提示我们有内存泄露

 

#include "stdafx.h"

#include <stdlib.h>

 

int _tmain(int argc, _TCHAR* argv[])
{

 char* p1 = (char*)malloc(100);
 char* p2 = new char[100];

 return 0;
}

 

2. 在MFC的代码中, 类似的代码,有内存泄露的提示,但不完整,new出来的内存能够提示文件代码行,malloc的内存只检查到有内存泄露,但是没有指出代码行,在大量代码中要找起来可就太麻烦了哦。

 

Detected memory leaks!
Dumping objects ->
{325} normal block at 0x0098F5D0, 100 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
e:/testproj/TestMemoryLeak.cpp (106) : {324} normal block at 0x0098F530, 100 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

 

3. 为了解决这个问题,我们需要改进代码

 

#include "stdafx.h"

#include <stdlib.h>

#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>

#define new   new(_NORMAL_BLOCK, __FILE__,__LINE__)
#define malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)


int _tmain(int argc, _TCHAR* argv[])
{
 _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
 char* p1 = (char*)malloc(100);
 char* p2 = new char[100];

 return 0;
}

 

4. 修改之后代码,运行后,VS能够提示内存泄露啦

Detected memory leaks!
Dumping objects ->
e:/testproj/testmemoryleak.cpp(19) : {109} normal block at 0x00027A90, 100 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
e:/testproj/testmemoryleak.cpp(18) : {108} normal block at 0x000279F0, 100 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值