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.