如果大家使用的是 Windows + Visual Studio 的话,有一个简单的方法,就是在让所有*.cpp文件在预处理之后,最上面都是这几行:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define NEW_WITH_MEMORY_LEAK_CHECKING new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new NEW_WITH_MEMORY_LEAK_CHECKING
方法有几个:
如果你的程序有多个cpp,那可以把这一段写在一个大家都会直接或间接#include的头文件里面,而且最好放在最开头 在上面的一种情况下,如果 Visual Studio 建立的工程还使用了预编译文件头,那可以把这几行贴在stdafx.h的最上方。 如果你的程序只有一个cpp,那直接贴在cpp文件的最上方就好了 接下来,你需要在程序即将运行完毕的阶段,添加以下代码:
_CrtDumpMemoryLeaks();
你可以将其添加到主函数的return 0;语句上方。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
#include<string>
#include<vector>
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define NEW_WITH_MEMORY_LEAK_CHECKING new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new NEW_WITH_MEMORY_LEAK_CHECKING
using namespace std;
struct Point
{
int x;
int y;
};
int main()
{
Point a{ 1, 2 };
Point b = a;
Point* c = new Point{ 1, 2 };
Point* d = c;
a.x = 10;
c->x = 10;
cout << &a << &b << endl;
cout << b.x << "," << d->x << endl;
cout << &a << &b << endl;
cout << &c << &d << endl;
_CrtDumpMemoryLeaks();
return 0;
}
|