1

我正在尝试识别我的 c++ 程序中的 memleaks。我使用 Visual Studio 2008。

我发现了一些教程处理在使用 new 而不是 malloc 进行内存分配时识别 memleaks,这是我在主要内容之上定义的:

#define __STDC_CONSTANT_MACROS 

#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
#endif

不幸的是,我得到了大量的错误,你可以在这里看到:http: //pastebin.com/9ax90VTg

但我想我发现了问题:没有更近的__FILE__也没有__LINE__定义。当我点击“RMB->go to definition”或“RMB->go to declaration”,__FILE__ 或者__LINE__ 我得到:

the symbol '__FILE__' is not defined 

the symbol '__LINE__  ' is not defined 

分别。

我应该如何解决这个问题?

4

2 回答 2

0

你找错树了。__FILE__并由__LINE__预处理器处理。他们不应该被定义。您没有向我们展示产生这些错误的实际代码,所以我不确定我们如何为您提供帮助。

于 2012-04-13T08:37:41.547 回答
0

符号__FILE____LINE__应始终由编译器定义。如果不是,您必须使用一些特殊选项来禁止它们。

另一方面,您发布的代码不能与标准库一起使用,因此应避免使用。这不是查找内存泄漏的好方法。

编辑:重读您的帖子:您似乎指望调试器向您展示定义;它不能,因为它们是由编译器自动生成的,在编译过程中会发生变化。另一方面,您看到的错误与您的宏以破坏标准库代码的方式重新定义关键字这一事实非常兼容。

于 2012-04-13T08:39:29.543 回答