一
Visual Studio 调试器和 C 运行时 (CRT) 库为我们提供了检测和识别内存泄漏的有效方法。主要使用函数:_CrtDumpMemoryLeaks();
二 实例
#define _CRTDBG_MAP_ALLOC //输出更详细的report
#include <stdlib.h>
#include <crtdbg.h>
//以上的内容必须放在其他include的前面

#include <vector>

class MyClass


{
private:
int *p;
public:
MyClass()

{
if(p != NULL)

{
p = new int(0);
}
}
~MyClass()

{
if(p != NULL)

{
delete p;
p = NULL;
}
}
};

int _tmain(int argc, _TCHAR* argv[])


{
int *i = NULL; // better for read
i = new int(0);
int *&y = i; // pointer's reference

MyClass *pMyClass = new MyClass();

std::vector<MyClass*> myClasses;
myClasses.push_back(new MyClass());
myClasses.push_back(new MyClass());

_CrtDumpMemoryLeaks();
return 0;
}
三说明
1)只对debug模有用,可以在程序运行后在vs的ide的output的最后看到泄露的检测结果。
2)可以检测系统类型,自定义类型和stl 容器。
3)#define _CRTDBG_MAP_ALLOC //包含该宏定义输出更详细的report
#include <stdlib.h>
#include <crtdbg.h>
//以上的内容必须放在其他include的前面,否则可能使上面定义的宏失效。
4)如果程序有统一的退出口,则在退出时调用_CrtDumpMemoryLeaks();
5)如果程序有多个出口,则可以在程序开始处包含下面的调用:_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );这条语句无论程序在什么地方退出都会自动调用 _CrtDumpMemoryLeaks。
Visual Studio 调试器和 C 运行时 (CRT) 库为我们提供了检测和识别内存泄漏的有效方法。主要使用函数:_CrtDumpMemoryLeaks();
二 实例
#define _CRTDBG_MAP_ALLOC //输出更详细的report
#include <stdlib.h>
#include <crtdbg.h>
//以上的内容必须放在其他include的前面
#include <vector>
class MyClass

{
private:
int *p;
public:
MyClass()
{
if(p != NULL)
{
p = new int(0);
}
}
~MyClass()
{
if(p != NULL)
{
delete p;
p = NULL;
}
}
};
int _tmain(int argc, _TCHAR* argv[])

{
int *i = NULL; // better for read
i = new int(0);
int *&y = i; // pointer's reference
MyClass *pMyClass = new MyClass();
std::vector<MyClass*> myClasses;
myClasses.push_back(new MyClass());
myClasses.push_back(new MyClass());
_CrtDumpMemoryLeaks();
return 0;
}三说明
1)只对debug模有用,可以在程序运行后在vs的ide的output的最后看到泄露的检测结果。
2)可以检测系统类型,自定义类型和stl 容器。
3)#define _CRTDBG_MAP_ALLOC //包含该宏定义输出更详细的report
#include <stdlib.h>
#include <crtdbg.h>
//以上的内容必须放在其他include的前面,否则可能使上面定义的宏失效。
4)如果程序有统一的退出口,则在退出时调用_CrtDumpMemoryLeaks();
5)如果程序有多个出口,则可以在程序开始处包含下面的调用:_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );这条语句无论程序在什么地方退出都会自动调用 _CrtDumpMemoryLeaks。
本文介绍如何使用Visual Studio调试器及CRT库中的_CrtDumpMemoryLeaks()等函数检测C++程序中的内存泄漏问题。通过实例代码展示了如何检测系统类型、自定义类型及STL容器的内存泄漏,并提供了一些实用技巧。
4万+

被折叠的 条评论
为什么被折叠?



