如果我在堆上声明一些东西,char *a=new char[1000]
并且主程序停止,如果没有delete[]
调用,分配的内存会发生什么?它保留在堆上还是自动释放?
问问题
1428 次
4 回答
8
就 C++ 而言,它会发生什么是完全未定义的。但是,几乎任何合理的操作系统都会在进程终止时清理进程分配的内存。然而,在自己之后进行清理是一个非常好的做法。
于 2013-03-12T16:57:53.347 回答
2
C++ 标准在您返回后不久指定“结束”的内容main()
- 它确实解释了全局对象在此之后的某个时间点被销毁,atexit()
并且其他一些“我们正在退出”级别的函数也在main
返回后运行。但是 C++ 标准没有规定程序所在的内存会发生什么。这同样适用于堆的内容。
如果系统中有操作系统(C++ 也没有指定您必须有操作系统),则由操作系统来清除应用程序。
于 2013-03-12T17:07:35.170 回答
0
通常它会被操作系统清除。
于 2013-03-12T16:59:28.520 回答
0
当您的应用程序因任何原因崩溃或中止时,操作系统会在正常情况下回收内存。但是,这是未定义的。
于 2013-03-12T17:01:34.890 回答