2

如果我在堆上声明一些东西,char *a=new char[1000]并且主程序停止,如果没有delete[]调用,分配的内存会发生什么?它保留在堆上还是自动释放?

4

4 回答 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 回答