我属于一所新成立的学院,老师不是很有才华。我个人多次发现他们犯了错误。这是因为他们自己有虚假的知识。因此,我自学编程和网络。因为我不能依靠他们。
既然是这样的情况,我就陷入了很大的怀疑。
我在算法分析这门课上的一位老师曾经说过:"当int main()返回0时,所有的缓冲区都关闭,所有使用的资源都被清除,为其他程序创造空间。"因此,"返回0"是一个很好的做法。对此,我反驳说:"先生,我们一直都知道,这只是表明程序已经成功地完成了执行。"她说:"你说对了一部分。"
这显然意味着她的意思是返回一个非零不会释放资源。
现在谁是正确的,我还是她?我应该要求退款吗?
main返回的值是给操作系统的。C或c++标准中没有规定根据该值会发生不同的事情。
你的老师完全错了。
你说对了。
你应该把钱要回来。
MIT有很好的在线课程会更准确。
当main
函数返回时打开的文件被关闭,输出流被刷新。C不指定malloc
分配的内存是否被释放
我们可以从两个层面来考虑这个问题。
- 当C/c++结束时(带有返回码)会发生什么
- C/c++结束后会发生什么(以及操作系统如何处理资源和返回代码)
对于1),C/c++不做任何资源管理,它将简单地向操作系统提供返回代码,不管0或其他值。
我能想到的一个例外是复杂的库资源(例如流),它可以在超出作用域时被销毁…并且可以有与之相关的资源清理行为(例如,包含在ofstream中的filebuf将在析构函数中关闭文件)
但以上是逐案分析
2)…简单的回答是,这取决于操作系统。典型的主流操作系统会在程序结束后负责资源清理。边缘操作系统(例如嵌入式系统)可能不会....甚至在主流操作系统的情况下,不同的资源会得到不同的处理或需要更多的时间来恢复(发现:OS;资源自动清理(Windows)和回答c++终止处理程序何时是正确的(TM)?
最后是操作系统对返回值的处理,同样取决于操作系统,我怀疑资源处理会随着不同的返回值而改变…但谁知道具体情况呢
以上答案的最终结论…操作系统按照它被编程的方式去做。返回任何整数对操作系统来说只是意味着程序已经终止,没有别的意思。操作系统并不关心它是否成功终止。当我们从main()返回任何整数时,该整数对操作系统来说只是垃圾。不管你返回0或-556或任何整数。对于操作系统,一切都是一样的。操作系统不清除任何资源。事实上,当涉及到C/c++时,清理资源是程序员的责任。操作系统不做任何操作。我们返回0只是因为这是一个标准的转换。