Windows 内存不足消息框
我有一个用VS2003开发的MFC应用程序 它在XP vista等中运行良好。 但当我在windows 8中执行它,并且我们使用它一段时间后, 然后不显示任何窗口。而不是显示带有“内存不足”消息的消息框。消息框中有我的应用程序的标题 这个问题在Windows7中也很少出现。 我尝试过使用processexplorer之类的工具来观察句柄,但它并没有增加。 还有许多论坛说,这是因为未关闭的句柄或资源的增加 有谁能建议我如何找到问题所在。或者任何一个提供了可能的原因 我无法在导致问题的机器中设置devenv。我不知道如何通过在其中执行测试构建进行诊断 请提供您的调查结果。Windows 内存不足消息框,windows,visual-c++,mfc,dialog,Windows,Visual C++,Mfc,Dialog,我有一个用VS2003开发的MFC应用程序 它在XP vista等中运行良好。 但当我在windows 8中执行它,并且我们使用它一段时间后, 然后不显示任何窗口。而不是显示带有“内存不足”消息的消息框。消息框中有我的应用程序的标题 这个问题在Windows7中也很少出现。 我尝试过使用processexplorer之类的工具来观察句柄,但它并没有增加。 还有许多论坛说,这是因为未关闭的句柄或资源的增加 有谁能建议我如何找到问题所在。或者任何一个提供了可能的原因 我无法在导致问题的机器中设置de
提前谢谢。很明显,您的某个地方有内存泄漏。没有看到代码就很难说得更具体 调试器确实是解决此问题的最佳方法。如果您可以在开发机器上重现问题,那将是最简单的情况。如果没有,您可以在本地或远程将调试器附加到另一台计算机上正在运行的进程 MFC库还支持一些基本功能,默认情况下为调试生成打开,并使用
afxenablemorytracking
函数控制其他生成。您可以使用此功能获取有关已分配但未正确释放(即泄漏)的内存块的信息
正如您提到的,Process Explorer是追踪资源泄漏的另一个好方法。您确定句柄计数保持不变,而不是随时间呈上升趋势吗?如果列中的值从未像问题所暗示的那样改变,那么您肯定是做错了什么。应用程序必须创建对象才能完成其工作。关键是要确保它在完成后处理掉它们
如果无法在运行的应用程序中重现问题,并且只有源代码可用,则需要检查代码并确保每次使用
new
都有相应的delete
(并且new[]
与delete[]
匹配)。一般来说,C++中,只要可能,就应该避免显式的动态内存分配。相反,请使用MFC或标准库提供的容器类。例如,不要手动分配数组,请使用std::vector
为您分配数组。这些容器类确保当对象超出作用域时,在析构函数中自动释放内存。感谢您的回复。发布时,应用程序的内存使用量约为4MB。在这之前,它在3.5到5 MBs之间变化…当然是内存泄漏的情况。让我告诉你,MFC exe将内存分配从一个版本更改为另一个版本。可能您的xp计算机没有显示消息框,但问题就在那里。最好的方法是调试它或使用消息框调试。