如何管理内存泄露

内容很简单,感觉用的话可以下。

  • 内存泄露的发生的常见情况
  1.  释放超出范围(忘记释放)

    void TestFuc()

  {

int *i = new int; //没有释放

*i = 11;

  }

   或者

  {

               char* str = new char[100]; //没有释放

               strcpy(str,"memory leak");

          }

 

 

 

      2.  丢失指针

class TestClass {

int* val;


public: TestClass() { val = new int;         *val = 11; } ~TestClass() {  delete val; }    }; void foo() { TestClass* a = new TestClass; TestClass* b = new TestClass; a = b; delete a; // 已删除 //delete b; //重复删除

}

 

3.   错误的使用new/delete

double* d = new double[12]; delete d; // delete d[0]; // 必须使用 delete [] d;

 

4.   错误释放

int *i; while(someCondition) {

i = new int;

//其他代码 } delete i;


注:比较复杂的是多个对象公用一个new的对象,释放要小心。

  • 如何找的内存泄露的代码
  1. 在使用CPP文件中使用 

#ifdef _DEBUG

#define new DEBUG_NEW
#endif

 

     2.  使用'_CRTDBG_MAP_ALLOC' 

#include <iostream>

#define _CRTDBG_MAP_ALLOC

#include <crtdbg.h>

int main()

{

_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

int* array = new int[10];

return 0;

}

 

      3.  只有猜测了, 但然也可以借助一些工具。

 

注:切莫在一个H文件中分配一个空间int *p = new int(p变量可以被外部使用),并在H文件中释放delete p;可是另一处W文件调用p = NULL。 

 

 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值