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