写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.
时间: 2024-10-31 21:47:32