5

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

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

4

2 回答 2

11

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

编辑:但是释放您在程序中分配的内存通常是一种好习惯,因为您将来修改它时可能会忽略它对 free 的调用。

于 2012-05-14T17:15:00.467 回答
6

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

但是,我不会选择“无需调用 free()”。如果您没有显式地释放您拥有 malloc() 的内存,这是一个糟糕的编程/设计概念,尽管您最终可以依靠操作系统为您执行此操作,但当您稍后修改您的内存时,它可能会导致内存泄漏项目不退出,但您忘记释放()您使用的内存。

于 2012-05-14T17:25:09.383 回答