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.
浙公网安备 33010602011771号