2013-03-12 85 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++没有指定您必须拥有操作系统),则清除应用程序由操作系统决定。