程序结束后释放C malloc()内存空间?

标签 c malloc free

<分区>

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 来释放已分配但未使用的变量的内存,尤其是在运行时(否则您将发生内存泄漏,可能/将慢慢耗尽所有可用内存)。

如果你想在应用程序终止前不释放内存,对我和大多数人来说都很好。但是,请确保你要运行应用程序的平台确实释放了内存之后返回操作系统。


关于查看标准(“官方规范”)

标准通常/总是遗漏实现细节,因此其中没有任何内容说明当正在运行的应用程序终止时,分配的内存尚未释放时会发生什么。

这是特定于实现的,因此取决于/取决于/在您运行它的内容上。

关于程序结束后释放C malloc()内存空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8596025/

相关文章:

在 C 中释放内存时无法理解此错误

c - #ifdef in c for filename 用于保护头文件中的静态函数

c - 释放指向结构的指针导致程序获得 "stuck"

c++ - 如何知道所使用的微软 C runtime 的版本?

使用函数 (ANSI C) 更改结构及其成员包含的地址

c - 在尝试释放()之前确定结构成员是否具有有效数据

c - 从函数返回到 main 的指针数组为 NULL

c - C 中未初始化的指针

c - 如何在c中操作整数类型的位?

c - 在 C 中不使用函数原型(prototype)有什么好处吗?