内容很简单,感觉用的话可以下。
- 内存泄露的发生的常见情况
- 释放超出范围(忘记释放)
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的对象,释放要小心。
- 如何找的内存泄露的代码
- 在使用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。