2013-08-01 73 views
0

的我有一個MFC應用程序開發與VS2003 它工作正常在XP Vista的等 但是,當我在Windows 8已經執行它,我們使用了一段時間,然後 沒有窗口顯示。而不是顯示消息「Out of Memory」的MessageBox。消息框有我的應用程序的標題。內存消息框

這個問題在Windows 7中也很少發生。 我曾嘗試使用諸如processexplorer之類的工具來觀察手柄,但並未增加。 也有很多論壇表示,這是因爲未關閉的句柄或資源的增加。

任何人都可以建議如何找到問題所在。或者任何人爲此提供了可能的原因。

我不能在造成問題的機器上設置devenv。我很困惑如何通過執行測試構建來診斷。

請提供您的發現。 在此先感謝。

+0

肯定會發生內存泄漏。讓我告訴你MFC的EXE改變他的內存分配版本。有可能是你的XP機器沒有顯示消息框,但問題在那裏。 –

+0

最好的方法是調試它或使用消息框調試。 –

回答

1

你明顯在某個地方有內存泄漏。沒有看到代碼就很難更具體。

調試器真的是解決這個問題的最好方法。如果你能在你的開發機器上重現問題,那將是最簡單的情況。如果沒有,您可以將調試器附加到另一臺機器上的運行進程,無論是本地還是遠程。

MFC庫還支持一些基本的memory leak detection,默認情況下爲調試版本打開,使用AfxEnableMemoryTracking函數可以控制其他版本。您可以使用此功能獲取有關哪些內存塊已分配但未正確解除分配(即泄漏)的信息。

就像你提到的那樣,Process Explorer是追蹤資源泄漏的另一種好方法。你是當然手柄計數保持不變,而不是隨着時間推移向上趨勢?如果列中的值是,但永遠不會改變,就像問題所暗示的那樣,那麼你肯定會做錯某些事情。您的應用程序已將設爲創建對象以完成其工作。重點是確保它在完成時處理它們。

如果您不能運行的應用程序重現該問題,並有可用的源代碼,你需要通過代碼,並確保每次使用的new都有相應的使用delete(並且new[]delete[]匹配)。通常在C++中,應儘可能避免顯式的動態內存分配。而應使用由MFC或標準庫提供的容器類。例如,不要手動分配數組,請使用std::vector爲您完成。這些容器類確保當對象超出範圍時,內存在析構函數中自動釋放。

+0

感謝您的回覆。 問題發生時,應用程序的內存使用量約爲4MB。在此之前,它在3.5到5 MB之間變化... – JijeshKV