我正在尝试在我的c ++程序中识别memleaks。我使用的是Visual Studio 2008。
我找到了一些关于识别memleaks的教程,同时使用new而不是malloc来进行内存分配,这就是我在主要内容中定义的内容:
#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-&gt;转到定义”或“{ - 1}}或__FILE__
上的”RMB-&gt;转到声明“时,我得到:
__LINE__
和
the symbol '__FILE__' is not defined
分别
我该如何解决这个问题?
答案 0 :(得分:0)
__FILE__
和__LINE__
由预处理器处理。他们不应该被定义。您没有向我们展示生成这些错误的实际代码,因此我不确定我们如何帮助您。
答案 1 :(得分:0)
编码器应始终定义符号__FILE__
和__LINE__
。如果不是,您必须使用一些特殊选项来禁止它们。
另一方面,您发布的代码不能与标准库一起使用,因此应该避免使用。 不是查找内存泄漏的好方法。
编辑:重新阅读你的帖子:你似乎指望调试器向你展示定义;它不能,因为它们是由编译器自动生成的,在编译期间会发生变化。另一方面,您看到的错误与宏重新定义关键字的事实非常兼容,这种方式会破坏标准库代码。