我在 VS 2008 中从事 C++ 项目已经有一段时间了。直到最近,在终止我的应用程序时,输出窗口会显示我是否有任何内存泄漏。然而,几天前我注意到它停止显示这些有价值的信息。我也尝试抛出一些 printf(),但输出窗口也没有显示。
我猜我在某处改变了偏好,但我似乎找不到它。现在所有输出显示的是它已加载/卸载的 dll。有任何想法吗?
谢谢,迈克
我在 VS 2008 中从事 C++ 项目已经有一段时间了。直到最近,在终止我的应用程序时,输出窗口会显示我是否有任何内存泄漏。然而,几天前我注意到它停止显示这些有价值的信息。我也尝试抛出一些 printf(),但输出窗口也没有显示。
我猜我在某处改变了偏好,但我似乎找不到它。现在所有输出显示的是它已加载/卸载的 dll。有任何想法吗?
谢谢,迈克
根据我自己的经验,丢失的内存泄漏输出可能是由于不同的原因。总结最重要的:
源代码中的更改:
开发环境中的设置会导致输出重定向到另一个窗口。一种可能性是:工具\选项\调试\常规\将所有输出窗口文本重定向到即时窗口(倒数第五个)。这里可能还存在其他可能性。
我想排除第 2 点的一种可能性是在 (main.cpp) 的行中创建一个简单的控制台应用程序:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifndef DEBUG_NEW
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
#endif
int _tmain(int argc, _TCHAR* argv[])
{
int nOldState = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
_CrtSetDbgFlag(nOldState | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
int *pInt = new int[100];
return 0;
}
如果正确运行此应用程序会输出内存泄漏,那么不幸的是,您可能是第一种情况
当然,我排除了输出可能消失的明显原因(其中一些已经在评论中提到)。