c语言 - 遇到 exit(1) 时,错误定位的内存会发生什么变化?



在 C 中,如果我使用 malloc 分配内存并在执行过程中,程序遇到异常/错误并以程序中手动合并的 exit(1) 语句退出,C 编译器是在意外退出之前自动释放内存还是必须在程序中的exit(1)行之前手动执行此操作。

我在 Ubuntu 32 位平台上使用 gcc-4.5.2 编译器。

一旦你调用exit,操作系统就会收回所有分配的内存。所以没有必要打电话给free.

编辑:但是,释放在程序中分配的内存通常是很好的做法,因为将来修改程序时可能会忽略释放内存的调用。

在一个设计良好的操作系统上,当一个进程退出时(使用 exit()、die()、abort() 或 raise() 或者被错误、信号或其他任何东西杀死),操作系统应该释放进程使用的所有资源,包括堆栈空间、堆、分配的内存(通常在堆上)、关闭打开的文件描述符(如果是 *NIX 系统)等。

但是,我不会选择"无需调用free()"。如果你没有明确释放()内存,这是一个糟糕的编程/设计概念,你有malloc()'ed,虽然你最终可以依靠操作系统为你做这件事,但当你以后修改你的项目不退出时,它可能会导致内存泄漏,但你忘记释放()你用过的内存。

最新更新