Memory leaks 无法使用VS2008内存泄漏检测器

Memory leaks 无法使用VS2008内存泄漏检测器,memory-leaks,memory-leak-detector,Memory Leaks,Memory Leak Detector,我试图使用VS2008内存泄漏工具,但我根本无法构建它 最简单的场景运行良好,但当我尝试使用CObject时,它不会编译 下面是代码(它是一个新创建的控制台应用程序) 结果:错误C2059:语法错误:afx.h中的“常量”: void* PASCAL operator new(size_t nSize); 如果我尝试将#ifdef#u调试移到#include“afx.h”下面,我会得到: 在线: DRV *d = new DRV; 那么,我做错了什么? 我可以使用内置的VS2008内存泄漏检

我试图使用VS2008内存泄漏工具,但我根本无法构建它

最简单的场景运行良好,但当我尝试使用CObject时,它不会编译

下面是代码(它是一个新创建的控制台应用程序)

结果:错误C2059:语法错误:afx.h中的“常量”:

void* PASCAL operator new(size_t nSize);
如果我尝试将#ifdef#u调试移到#include“afx.h”下面,我会得到:

在线:

DRV *d = new DRV;
那么,我做错了什么? 我可以使用内置的VS2008内存泄漏检测器吗?
请帮助创建文件DebugNew.h并将此代码添加到其中:

#pragma once

#include "crtdbg.h"
#ifdef _DEBUG
#define DEBUG_NEW   new( _NORMAL_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_NEW
#endif
在cpp文件中:

#include "stdafx.h"
#include "DebugNew.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif    

int _tmain(int argc, _TCHAR* argv[])
{
    CrtSetDbgFlag( _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);

    char *d = new char[100];
}
DebugNew.h
文件定义了
new
运算符,它允许包含每个分配的源代码行信息<代码>#定义新调试_新建行仅在调试生成中将默认的
新建
重新定义为
调试_新建
。此行应放在所有.cpp文件中的所有
#include
行之后
crtsetdbgfagflag
在调试生成中启用内存泄漏分配-当程序退出时,将打印所有未释放的分配。由于重新定义了
new
运算符,因此会使用源行信息打印它们

对于MFC项目,您只需要添加行

#ifdef _DEBUG
#define new DEBUG_NEW
#endif    

到每个.cpp文件。MFC已经完成了所有其他工作。MFC项目由MFC应用程序向导创建,默认情况下已包含所有必需的内容。例如,使用向导创建具有MFC支持的Win32控制台应用程序-内存泄漏跟踪正在工作。您只需向添加到项目中的每个新文件添加
new DEBUG\u new
重新定义。

问题在于使用了CObject(需要afx.h),因此您的建议对我没有帮助。答案已编辑。使用MFC应用程序向导创建新项目,并添加
DRV*d=newdrv行到它-它已成功编译,并检测到泄漏。谢谢Alex,但它仍然无法编译。最好使用向导创建MFC项目。它适用于VS2010,我不能用VS2008测试它,但它必须适用于每个VS版本。你是对的。它适用于新创建的MFC应用程序。我的问题是我有一个巨大的项目,它没有编译。所以我必须深入挖掘。谢谢
#include "stdafx.h"
#include "DebugNew.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif    

int _tmain(int argc, _TCHAR* argv[])
{
    CrtSetDbgFlag( _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);

    char *d = new char[100];
}
#ifdef _DEBUG
#define new DEBUG_NEW
#endif