当遇到exit(1)时,malloc的内存会发生什么?

Abh*_*nav 5 c malloc free memory-leaks exit

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

我在Ubuntu 32bit平台上使用gcc-4.5.2编译器.

P.P*_*.P. 11

一旦你打电话exit,OS就会收回所有分配的内存.所以没必要打电话free.

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

  • 答案应该反映良好的编程实践,而不是鼓励不良做法,它可能会在OP的头脑中产生错误的印象,或者是一个不熟悉并且只是通过*建议*的语言新手,所以建议最好是完成这个回答有人可能会得出一个结论,他们甚至不需要在程序退出时释放其他资源,这绝对不是真的.你应该在做出这样的陈述时理解你的答案的含义,除非你更新你的答案为了反映这一点,你有我的-1. (2认同)
  • 这是"最佳实践",同样避免goto是"最佳实践" - 一种不灵活且过度简化的规则,无法解决核心问题.正确陈述的规则应该是"最小化动态分配的内存的生命周期".在这种形式中,请注意在`exit`之前调用`free`对生命周期没有任何影响.此外,例如,如果您在启动时分配了一块内存并且从未再次使用过它,那么在`exit`之前调用它就不能解决问题.相反,你应该在完成后立即调用"免费". (2认同)

小智 6

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

但是,我不会去'不需要免费电话()'.这是一个糟糕的编程/设计概念,如果你没有显式释放()内存,你有malloc()'ed虽然你最终可以依靠操作系统为你做这个,它可能会导致内存泄漏,当你以后修改你的项目不要退出,但你忘了释放()你用过的记忆.

  • 是的,严格来说这是"不必要的".但谁知道呢.当我这样做时,我甚至感到很难过.:d (2认同)