2013-03-12 102 views
2

如果我在char *a=new char[1000]這樣的堆上聲明瞭一些東西,並且主程序停止瞭如果沒有delete[]調用會分配內存會發生什麼?它仍然在堆上或自動釋放?C++堆內存分配/釋放

+2

一些術語:你**聲明**和**定義**名稱,如'a'在這裏。你**在堆上分配**對象。那麼,正式的,「免費店鋪」,但沒人說這個。 – 2013-03-12 17:14:47

+0

重複http://stackoverflow.com/questions/6727383/dynamically-allocated-memory-after-program-termination – Saqlain 2013-03-12 17:16:55

+2

@PeteBecker:我可以引用我的用戶信息,供人們這樣做時參考「C++沒有堆所以我拒絕回答你的問題「的事情? – 2013-03-12 17:33:24

回答

8

就C++而言,它會發生什麼是完全未定義的。但是,幾乎任何合理的操作系統都會在進程終止時清理進程分配的內存。然而,這是一種非常好的做法,需要自己清理。

0

通常它會被操作系統清除。

0

當您的應用程序因任何原因崩潰或中止時,操作系統在正常情況下回收內存。但是,這是不確定的。

2

的C++標準規定「結尾」你從main()返回後不久 - 它解釋全局對象在之後的某一處被破壞,atexit()和其他一些「我們正在退出」級的功能也得到main後運行回報。但是,你的程序所在的內存不會被C++標準指定。這同樣適用於堆的內容。

如果系統中存在操作系統(C++沒有指定您必須擁有操作系統),則清除應用程序由操作系統決定。