出于调试目的,当我编写应用程序时,我要做的第一件事就是将以下内容放入stdafx.h中:
// -- leak detection ----------------------------------------------------------
#ifdef _DEBUG
// http://msdn.microsoft.com/en-us/library/e5ewb1h3(v=VS.80).aspx
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
#endif
然后我将以下内容添加到程序的main()函数的开头:
#ifdef _DEBUG
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
//_CrtSetBreakAlloc( 670 );
#endif
重新定义新操作符以提供泄漏信息是一个有用的工具。但是CoTaskMemAlloc和CoTaskMemFree呢?如何使用这些来检测泄漏?
我正在编写使用COM和DirectShow的软件,需要知道如何跟踪因使用CoTask分配而导致的泄漏。
谢谢!
答案 0 :(得分:6)
摆脱手动内存管理,你将摆脱泄漏。拥抱RAII,永远不要使用资源,除非它包含在一个处理程序中,其唯一目的是包装该资源。
我认为多年来我没有内存泄漏(或崩溃,FTM)。但是在过去的十年里,我写了delete
不到六次。
答案 1 :(得分:3)
Visual Leak Detector - 非常易于使用,并且内置版本的应用程序没有任何开销。
答案 2 :(得分:1)
还有应用程序验证程序。它可以跟踪一大堆其他问题,除了泄漏,比如你忘记释放win32对象的地方,如句柄等......
MSDN链接为:http://msdn.microsoft.com/en-us/library/ms220948(VS.80).aspx
的类似问题答案 3 :(得分:0)
但是CoTaskMemAlloc和CoTaskMemFree呢?如何使用这些来检测泄漏?
malloc
/ free
无法帮助您检测泄漏的原因相同。您需要适当地包装它们以帮助您进行泄漏检测。
正如其他海报所说,如果您担心泄漏,那么请考虑到这一要求,开始设计您的应用程序。使用自定义分配器,您可以在其中管理/跟踪分配/解除分配。
您是否碰巧访问过此问题:CoTaskMemAlloc
的用法?