如果类的析构函数在main函数返回后调用,内存泄漏检测函数应该放在这个析构函数的末尾。

45 篇文章 0 订阅
38 篇文章 0 订阅

如果类的析构函数在main函数返回后调用,内存泄漏检测函数应该放在这个析构函数的末尾。

举例说明如下。

下面程序实际没有内存泄漏,但由于 _CrtDumpMemoryLeaks 函数放的位置不对,而检测有内存泄漏。

#define _CRTDBG_MAP_ALLOC 
#include <crtdbg.h>
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__) 
#endif

#include<stdio.h> 
#include<stdlib.h> 

class  A
{
private:
	void*  p;
public:
  A ()
  {
	  printf("in A::A\n");
	  p = malloc(100);
  }
  virtual ~A ()
  {
	  free(p);
	  printf("in A::~A\n");
	  getchar();
  }
};

int main()   
{   
	A   a;

	getchar();
	_CrtDumpMemoryLeaks();

	return 0;   
} 


检测结果:

Detected memory leaks!
Dumping objects ->
e:\test.cpp(18) : {55} normal block at 0x00392950, 100 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

如果把 _CrtDumpMemoryLeaks 函数放到析构函数 A::~A() 里,就不提示内存泄漏了,结果就正常了。如下:

#define _CRTDBG_MAP_ALLOC 
#include <crtdbg.h>
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__) 
#endif

#include<stdio.h> 
#include<stdlib.h> 

class  A
{
private:
	void*  p;
public:
  A ()
  {
	  printf("in A::A\n");
	  p = malloc(100);
  }
  virtual ~A ()
  {
	  free(p);
	  printf("in A::~A\n");
	  getchar();
	  _CrtDumpMemoryLeaks();
  }
};

int main()   
{   
	A   a;

	getchar();

	return 0;   
} 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值