Possible Duplicate:
What REALLY happens when you don't free after malloc?
Is freeing allocated memory needed when exiting a program in C
在我的第一节 C 课上,我被灌输了我应该在 malloc()
或 calloc()
之后调用 free()
因为它在动态分配内存后释放空间,否则它将消失(我假设直到系统重启)。但是,最近我开始在各种编码站点上阅读到该内存将在程序结束时释放回来。
哪一个是正确的说法?
我会查看官方规范,但我不知道从哪里得到它(尝试谷歌搜索)。
谢谢。
真的很简短的回答..
两种说法都是正确的。
更长更精致的..
它们都是正确的,当您的应用程序完全终止时,分配的内存将(可能)释放回系统。
我写“可能”是因为所有现代/广泛使用的操作系统都会释放所使用的内存,但一些原始系统可能没有此“功能”可用。
由于上述原因,您应该始终使用 free
来释放已分配但未使用的变量的内存,尤其是在运行时(否则您将发生内存泄漏,可能/将慢慢耗尽所有可用内存)。
如果你想在应用程序终止前不释放内存,对我和大多数人来说都很好。但是,请确保你要运行应用程序的平台确实释放了内存之后返回操作系统。
关于查看标准(“官方规范”)
标准通常/总是遗漏实现细节,因此其中没有任何内容说明当正在运行的应用程序终止时,分配的内存尚未释放时会发生什么。
这是特定于实现的,因此取决于/取决于/在您运行它的内容上。