在C语言中,如果我使用malloc
分配了一段内存,在程序执行期间遇到异常或错误后,程序会通过手动加入的exit(1)
语句退出,那么C编译器会在意外退出前自动释放内存,还是我必须在exit(1)
语句前手动释放内存。
我在Ubuntu 32位平台上使用gcc-4.5.2编译器。
在C语言中,如果我使用malloc
分配了一段内存,在程序执行期间遇到异常或错误后,程序会通过手动加入的exit(1)
语句退出,那么C编译器会在意外退出前自动释放内存,还是我必须在exit(1)
语句前手动释放内存。
我在Ubuntu 32位平台上使用gcc-4.5.2编译器。
exit
,操作系统将收回所有分配的内存。因此不需要调用 free
。
exit
之前调用free
在这里肯定是不必要的。 - P.Pexit
之前对可能已经有数天或数周没有被触及的结构体进行递归调用free
是极其有害的。它会导致交换空间崩溃,从物理内存中驱逐大量实际有用的数据/缓存,并且除了让valgrind感到高兴之外,什么也没有做到。你为什么认为Firefox在你单击关闭按钮后需要20多秒才能消失? - R.. GitHub STOP HELPING ICEexit
之前调用free
不会对其生命周期产生影响。此外,如果例如在启动时分配了一块内存,并且从未再次使用它,则在exit
之前对其调用free
并不能解决问题。相反,您应该在完成使用后立即调用free
。 - R.. GitHub STOP HELPING ICE