内存不足消息框

时间:2013-08-01 11:18:23

标签: windows visual-c++ mfc dialog

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

Windows 7中很少发生此问题。 我曾尝试使用processexplorer这样的工具来观察手柄,而且还没有增加。 此外,许多论坛都表示,这是因为未关闭的句柄或资源的增加。

任何人都可以建议我如何才能找到问题所在。或任何一个提供可能的原因。

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

请提供您的发现。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

你显然在某处有内存泄漏。没有看到代码就很难更具体。

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

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

正如您所提到的,Process Explorer是另一种追踪资源泄漏的好方法。您是否确定手柄数量是否保持不变而不是随着时间的推移趋势向上?如果列中的值永远不会改变,就像问题所暗示的那样,那么你肯定会做错事。您的应用程序创建对象以完成其工作。重点是确保它在完成后处理它们。

如果您无法使用正在运行的应用程序重现问题并且可用的源代码,则需要查看代码并确保每次使用{{1} }具有相应的new使用(deletenew[]匹配)。通常在C ++中,您应该尽可能避免显式动态内存分配。而是使用由MFC或标准库提供的容器类。例如,不要手动分配数组,使用delete[]为您执行此操作。这些容器类确保当对象超出范围时,在析构函数中自动释放内存。