在 C 中,如果我使用 malloc
分配内存并在执行过程中,程序遇到异常/错误并以程序中手动合并的 exit(1)
语句退出,C 编译器是在意外退出之前自动释放内存还是必须在程序中的exit(1)
行之前手动执行此操作。
我在 Ubuntu 32 位平台上使用 gcc-4.5.2 编译器。
一旦你调用exit
,操作系统就会收回所有分配的内存。所以没有必要打电话给free
.
编辑:但是,释放在程序中分配的内存通常是很好的做法,因为将来修改程序时可能会忽略释放内存的调用。
在一个设计良好的操作系统上,当一个进程退出时(使用 exit()、die()、abort() 或 raise() 或者被错误、信号或其他任何东西杀死),操作系统应该释放进程使用的所有资源,包括堆栈空间、堆、分配的内存(通常在堆上)、关闭打开的文件描述符(如果是 *NIX 系统)等。
但是,我不会选择"无需调用free()"。如果你没有明确释放()内存,这是一个糟糕的编程/设计概念,你有malloc()'ed,虽然你最终可以依靠操作系统为你做这件事,但当你以后修改你的项目不退出时,它可能会导致内存泄漏,但你忘记释放()你用过的内存。