当前位置:首页 > 内存 > 正文

重复释放内存C语言

  • 内存
  • 2024-08-14 00:16:03
  • 6108

一、C语言,为什么动态内存分配申请后,还要再释放?1、即使没有free(),main()结束后malloc()的内存也会自动释放。这里的监视器就是操作系统。一个设计良好的操作系统会注册分配给每个应用程序的每一块内存。这使得它即使在应用程序本身失控时也能有效地回收内存。您可以尝试在任务管理器中强制结束您的程序。这样,程序本身的free()操作显然没有被执行,但是内存并没有泄漏。
()的目的是实时回收内存。如果你的程序很简单,不写free()也没关系。在程序结束之前,您不会使用大量内存,也不会降低系统性能。当你的程序结束后,操作系统会帮你完成它。这有效。但是当你开始开发大型程序时,你会发现不写free()的后果是非常严重的。您很可能需要在程序中分配10M内存10k次。如果每次使用后使用free()释放内存,那么你的程序只需要占用10M内存即可运行;但是如果你不使用free(),那么你的程序在结束之前会消耗100G的内存。这当然包括大部分的虚拟内存,而且由于虚拟内存的操作需要从磁盘进行读写,因此极大地影响了系统的性能。您的系统可能会因此崩溃。
3.任何时候为每个malloc()编写一个对应的free()是一个很好的编程习惯。这不仅体现在处理大型程序时的必要性,还体现在程序优秀的风格和健壮性上。毕竟,只有您自己的程序知道您为哪些操作分配了哪些内存以及何时不再需要它。因此,这块内存当然最好由你自己的程序来回收。


二、C语言,内存释放两次到底会怎么样阿?这取决于您释放了哪些内存
如果有无法访问的内容(例如NULL数据),它将失败,或者可能不是问题。