0

我有一个用 VS2003 开发的 MFC 应用程序,它在 XP vista 等中运行良好。但是当我在 windows 8 中执行它时,我们使用了一段时间,然后没有显示窗口。而是显示带有消息“内存不足”的 MessageBox。消息框有我的应用程序的标题。

这个问题在 Windows 7 中也很少发生。我曾尝试使用 processexplorer 之类的工具来观察句柄,但它并没有增加。也有很多论坛说这是因为未关闭的句柄或资源的增加。

任何人都可以建议我如何找到问题所在。或者任何人为此提供了可能的原因。

我无法在导致问题的机器中设置 devenv。我很困惑如何通过在其中执行测试构建来进行诊断。

请提供你的发现。提前致谢。

4

1 回答 1

1

您显然在某处有内存泄漏。如果没有看到代码,很难更具体。

调试器确实是解决此问题的最佳方法。如果您可以在您的开发机器上重现该问题,那将是最简单的情况。如果没有,您可以在本地或远程将调试器附加到另一台机器上正在运行的进程。

MFC 库还支持一些基本的内存泄漏检测,默认情况下为 Debug 构建打开,并且对于使用该AfxEnableMemoryTracking功能的其他构建可控制。您可以使用此功能来获取有关哪些内存块已分配但未正确释放(即泄漏)的信息。

正如您所提到的,Process Explorer 是另一种追踪资源泄漏的好方法。您确定句柄计数保持不变而不是随着时间的推移呈上升趋势吗?如果列中的值永远不会像问题所暗示的那样改变,那么你肯定做错了什么。您的应用程序必须创建对象才能完成其工作。关键是确保它在完成后处理它们。

如果您无法重现正在运行的应用程序的问题并且只有可用的源代码,则您需要仔细检查代码并确保每次使用new都有对应的使用delete(并且与new[]匹配delete[])。通常在 C++ 中,您应该尽可能避免显式动态内存分配。而是使用 MFC 或标准库提供的容器类。例如,不要手动分配数组,用std::vector它来为你做。这些容器类确保在对象超出范围时在析构函数中自动释放内存。

于 2013-08-01T11:48:35.943 回答