C 返回0之前的Free();

C 返回0之前的Free();,c,C,如果我通过传递返回0来结束执行,会发生什么;在使用malloc并且没有释放分配的部分内存之后 int * var; var = (int *)malloc(sizeof(int)) ; free(var) ; return 0; 它是特定于实现的 在最著名的桌面或服务器操作系统上,例如Linux、MacOSX、Windows。。。一旦终止,每个已使用的资源都将被释放,这包括它的资源。因此,即使是未折叠的堆内存也会被释放 特别是,如果您编写了一个快速运行的程序,例如,您知道它总是在不到几秒钟的时

如果我通过传递返回0来结束执行,会发生什么;在使用malloc并且没有释放分配的部分内存之后

int * var;
var = (int *)malloc(sizeof(int)) ;
free(var) ;
return 0;

它是特定于实现的

在最著名的桌面或服务器操作系统上,例如Linux、MacOSX、Windows。。。一旦终止,每个已使用的资源都将被释放,这包括它的资源。因此,即使是未折叠的堆内存也会被释放

特别是,如果您编写了一个快速运行的程序,例如,您知道它总是在不到几秒钟的时间内运行,那么接受一些可能会更容易,但如果您这样做,请在您的代码和/或文档中对此进行注释。许多现实生活中的程序都在这样做,特别是编译器,可能还有一些

相反,如果您正在对服务器(如数据库或计算服务器)进行编码,则应避免任何内存泄漏,这会使服务器进程无限增长,直至崩溃。您通常应该非常小心,每个分配给处理一个请求的堆内存在响应该请求后都会获得free-d

在某些嵌入式操作系统上,如果您没有显式释放所有资源来释放所有堆分配的内存,则会丢失所有打开的流,并且正确地说,您有一个

另见相关问题。在包括Linux在内的许多操作系统上,您可以用来查找内存泄漏漏洞。对于最近的gcc,您可能会使用-g-fsanize=address

至少也要阅读一些相关的概念和术语。如果在C中编程,你可以考虑使用.< /P>
然而,系统地释放所有以前malloc-ed的内存有一个很好的实际原因:这是一个很好的编程规程,使用valgrind这样的工具可以帮助调试真正的内存错误。此外,它还使您的代码更干净,您可以在某些不同的上下文中重用它,例如,作为某些库的一部分,在长时间运行的进程中可用。

如前所述,该程序包含内存泄漏。具体地说,内存泄漏的影响取决于环境;在最好的情况下,什么也不会发生,在最坏的情况下,机器迟早会崩溃。内存泄漏的存在在任何情况下都将被视为一个bug。

如果不释放内存,应用程序将出现内存泄漏。因此,如果您不释放内存并让应用程序运行几天,它将开始减速,最终崩溃。

如果您在堆上分配内存而不释放内存,那么您的程序中就会出现内存泄漏。如果您的意思是在不清理所有内容的情况下结束程序,在大多数情况下,这不会是一个大问题。但不要依赖于此。还是内存泄漏。内存泄漏是什么?我对这么多的否决票感到有点惊讶。在我看来,这是一个合理的问题,特别是针对OP不熟悉内存泄漏这一明显的背景。也许他们认为每个人生来就知道一切。实际上,我在几个程序中使用Boehm的GC,它在实践中运行得出奇地好