c ++堆内存分配/释放

时间:2013-03-12 16:56:06

标签: c++

如果我像char *a=new char[1000]那样在堆上声明某些内容,并且主程序会停止在没有delete[]调用时分配的内存会发生什么?它仍然在堆上或自动解除分配?

4 个答案:

答案 0 :(得分:8)

就C ++而言,它将会发生什么是完全未定义的。但是,几乎任何合理的操作系统都会清除进程终止时分配的内存。然而,在你自己之后进行清理是一种非常好的做法。

答案 1 :(得分:2)

main()返回后不久C ++标准指定“结束” - 它确实解释了全局对象在此之后的某个时刻被销毁,atexit()以及其他一些“我们正在退出”级别函数也会在main返回后运行。但是,C ++标准没有指定程序所在的内存会发生什么。这同样适用于堆的内容。

如果系统中存在操作系统,则由操作系统清理应用程序(C ++未指定您必须具有操作系统)。

答案 2 :(得分:0)

通常它会被操作系统清除。

答案 3 :(得分:0)

当您的应用程序因任何原因崩溃或中止时,操作系统会在正常情况下回收内存。但是,这是未定义的。