首页 > 代码库 > c++内存泄漏处理(积累)

c++内存泄漏处理(积累)

写c++程序时,经常会出现内存泄漏的问题,这里从网上找了一种很麻烦的方法:如果想找到每个cpp文件的内存泄漏,都必须在每个cpp加上如下代码:

#include <crtdbg.h>
#ifdef _DEBUG
#define DEBUG_CLIENTBLOCK   new(_CLIENT_BLOCK, __FILE__, __LINE__)
#define new DEBUG_CLIENTBLOCK
#else
#define DEBUG_CLIENTBLOCK
#endif

下面给出一段测试的代码

test.h

#include <memory.h>

void funNew();
test.cpp

#include "text.h"

#include <crtdbg.h>
#ifdef _DEBUG
#define DEBUG_CLIENTBLOCK   new(_CLIENT_BLOCK, __FILE__, __LINE__)
#define new DEBUG_CLIENTBLOCK
#else
#define DEBUG_CLIENTBLOCK
#endif

void funNew()
{
	int *p = new int();
}
main.cpp

#include <iostream>
#include <assert.h>
#include "text.h"

#include <crtdbg.h>
#ifdef _DEBUG
#define DEBUG_CLIENTBLOCK   new(_CLIENT_BLOCK, __FILE__, __LINE__)
#define new DEBUG_CLIENTBLOCK
#else
#define DEBUG_CLIENTBLOCK
#endif

int main()
{
	_CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

	int* p = new int();
	funNew();
	//delete p;
	return 0;
}

输出

Detected memory leaks!
Dumping objects ->
f:\project1\test.cpp(13) : {157} client block at 0x001E9180, subtype 0, 4 bytes long.
 Data: <    > 00 00 00 00 
f:\project1\main.cpp(17) : {156} client block at 0x001E9140, subtype 0, 4 bytes long.
 Data: <    > 00 00 00 00 
Object dump complete.