2014-10-29 21 views
0

假設我創建了類似int pointerpointer = new int[10];的東西。現在,如果在完成我的陣列時忘記使用delete[],我們將發生內存泄漏。但是,如果關閉我的IDE並使用相同的代碼重新啓動備份,會發生什麼情況,但是這次我添加delete[] pointer第一次程序運行被堵塞導致的泄漏,還是仍然存在......永遠?當內存泄漏時,如果程序再次運行,可以插入泄漏是否存在?

+2

內存丟失,直到**進程(不是你的IDE)終止**。 _Usually_操作系統釋放分配的內存(即使在大多數情況下,但不是所有的操作系​​統中,您都忘記自己做)。 – 2014-10-29 10:49:18

+0

'delete [] pointer'不管用,因爲'pointer'將被初始化或爲空。 – 2014-10-29 10:57:13

+0

@AdrianoRepetti您能否指出一個操作系統不能釋放屬於終止進程的所有資源? – 2014-10-29 12:36:42

回答

0

只要程序繼續運行,程序就會泄漏到本地。這可能是您在IDE中運行程序或使用命令行單獨運行的程序,但是當您運行的程序存在時,操作系統將回收內存。

據我所知,重新啓動您的IDE應該不會對正在運行的程序的內存有任何影響。

+0

好吧,如果我理解這可以,如果我正在運行的程序在編譯時到達'delete []'部分之前崩潰,我不會在我的計算機上發生永久性內存泄漏這是由IDE編譯程序引起的,我在問,因爲我的教授有語言障礙,我得到的印象是,如果你開發的程序在到達delete []部分之前隨時崩潰,那麼會導致內存泄漏在你的電腦上。 – ZeeZeeZee 2014-10-29 22:28:35

+0

是的,你的理解是正確的。您的計算機上不會有永久性內存泄漏。 – Asela 2014-11-10 10:14:21

0

關閉你的IDE將無能爲力。

當您的應用程序退出操作系統將'清除'您的應用程序使用的內存。 (標記爲全部未使用)。

您的IDE處理啓動您的應用程序,並且(可能)也爲其運行調試器,但應用程序仍然與IDE分離。當您的應用程序運行時,它所使用的內存都不屬於IDE。當它終止時,由於IDE斷開連接,應用程序使用的所有內存都是免費的,並且IDE保持打開的事實並不妨礙這一點,或者導致內存從IDE泄漏。

+0

不,它確實是清除它的操作系統。沒有現有的C++運行時間困擾。 – MSalters 2014-10-29 11:10:55

+0

真的嗎?好的,固定的。我想這是有道理的。 – Baldrickk 2014-10-29 11:11:48

+0

「實際上它是C++運行時」 - 不,它(幾乎可以肯定)是操作系統。否則,如果進程中止,則會永久性泄漏內存。 – 2014-10-29 11:11:58