如果我像char *a=new char[1000]
那样在堆上声明某些内容,并且主程序会停止在没有delete[]
调用时分配的内存会发生什么?它仍然在堆上或自动解除分配?
答案 0 :(得分:8)
就C ++而言,它将会发生什么是完全未定义的。但是,几乎任何合理的操作系统都会清除进程终止时分配的内存。然而,在你自己之后进行清理是一种非常好的做法。
答案 1 :(得分:2)
从main()
返回后不久C ++标准指定“结束” - 它确实解释了全局对象在此之后的某个时刻被销毁,atexit()
以及其他一些“我们正在退出”级别函数也会在main
返回后运行。但是,C ++标准没有指定程序所在的内存会发生什么。这同样适用于堆的内容。
如果系统中存在操作系统,则由操作系统清理应用程序(C ++未指定您必须具有操作系统)。
答案 2 :(得分:0)
通常它会被操作系统清除。
答案 3 :(得分:0)
当您的应用程序因任何原因崩溃或中止时,操作系统会在正常情况下回收内存。但是,这是未定义的。