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.






posted @ 2016-01-03 19:26  mengfanrong  阅读(389)  评论(0编辑  收藏  举报