我想测试C ++ Visual Studio内存泄漏检测中的内存泄漏程序。在一些泄漏上,调试控制台中的源和行号有很好的路径。但是在一些泄漏上只有内存地址。有些我能够在我的代码中识别,但有些则没有。在一些应用中它是例如12个字节,还有一些。
我尝试了最简单的单元测试,使用以下方法。甚至这会引发4字节的泄漏。
Cpp文件:
TEST_METHOD(TestMemoryLeakDetection){
_CrtDumpMemoryLeaks();
}
stdafx.h,它包含在所有文件中:
#pragma once
#include "targetver.h"
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
// http://msdn.microsoft.com/en-us/library/e5ewb1h3(v=vs.71).aspx
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
#define new DBG_NEW
#endif
#endif // _DEBUG
调试期间的检测输出显示:
Detected memory leaks!
Dumping objects ->
{147} normal block at 0x069A9EA0, 4 bytes long.
Data: <t ]> 74 A8 95 5D
Object dump complete.
我也试过这个,但它没有做任何事情:
TEST_METHOD(TestMemoryLeakDetectionFour){
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
_CrtSetBreakAlloc(147);
_CrtSetBreakAlloc(146);
}
我使用的是Visual Studio 2013和Visual C ++〜Native Unit Test Project。 请注意,在较大的项目中,我遇到越来越多类似的小4字节泄漏(我无法确定它们来自哪里)。
感谢您的任何想法。 Jarda