2012-08-14 92 views
-1

我在堆中存在嚴重問題,因爲在之前的程序中,我沒有刪除指針變量。如何清理內存空間/堆以運行當前程序?C++清理堆

+1

你的意思是你有內存泄漏?如果您的計算機內存不足,請重新啓動它。 – Annabelle 2012-08-14 00:55:36

+0

我們在這裏談論什麼樣的系統?普通的Windows/Mac OS/Linux機器?嵌入式系統? – 2012-08-14 00:56:18

+0

我正在使用安全外殼通過mac osx命令行連接到太陽計算機。 – teamaster 2012-08-14 00:57:42

回答

0

對於使用new/malloc或其他此類函數在堆上進行的每個分配,必須刪除/釋放完成時使用的資源。

C++提供了一些簡單的方法來實現這一點,使用構造函數分配資源和析構函數來釋放資源。

然後有很多聰明的方式與std :: auto_ptr甚至其他智能指針,可以幫助你管理這個。

基本上你已經分配了它 - 所以這是你的工作來釋放它。

+0

我不記得我創建的代碼/動態變量/指針,因爲我刪除了代碼。任何其他方式來清理呢? – teamaster 2012-08-14 01:00:08

+2

是的,但通常操作系統會在進程死機後刪除所有內容,通常所有內容都是沙盒,所有現代操作系統都採用一些內存保護系統。 – user827992 2012-08-14 01:01:41

+0

清潔什麼?理論上你必須不分配內存 - 重新啓動機器將是一個可行的方法 - 實際上大多數操作系統將在程序退出時釋放內存。 – 2012-08-14 01:01:59

1

殺死有問題的進程,然後操作系統會爲你清理它們的內存。

+0

不保證:-) – 2012-08-14 01:04:54

+3

不按標準的課程,但是在現代操作系統上(例如OP所說的太陽)它會。 – tobyodavies 2012-08-14 01:07:12

+0

同意 - 但在每個操作系統上「有效」的答案 - 即使是要創建的答案也要優於平臺特定的示例。依靠非標準功能使維護程序員保持業務。 VMS總是將本地變量設置爲零類型值 - 不是便攜式:-) – 2012-08-14 01:09:14