在C语言进行编程中,为啥要释放旧内存?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C语言进行编程中,为啥要释放旧内存?相关的知识,希望对你有一定的参考价值。
hstring *sub
先声明了一个指针,我看别人的程序,为什么接下来就把这个指针的内存给释放了(if(sub->ch) free(sub->ch); /*释放旧空间*/),之后再使用malloc函数重新给它分配内存,为什么要这样做呢?不是多此一举吗?
即是说C/C++ 都需要主动释放动态申请的内存。
试着解释下为什么要主动释放动态申请的内存:
1.动态申请的内存,存储在堆中,编译器不会自己回收,回收的意义:通俗讲就是告诉编译器,这片内存可以使用。
如果不被回收,这片内存就永远都不会被重新利用。也就是内存泄露。
例如 int *a=(int *)malloc (sizeof(int)*4);
2.现在只有a这个指针指向这片动态申请的内存,再没有别的路径可以找到这片内存空间了。如果在释放a所指向的内存空间之前就改变了a的指向,那么可知,这片内存,将不可能再被找到了。那么这片内存就不会被释放,也就是上面说到的内存泄露。 参考技术A 这样做是为了避免内存泄露,虽然你可能有好几个G的内存,虽然一次可能只泄露几个字节,多循环几趟总会把你内存用完的。这样写程序是一种良好的编程习惯。
就像,当你衣服脏了的时候,应该换一套干净的,而旧的衣服会拿去洗。 参考技术B 如果这个变量再很多地方要用到谁都不能保证自己记得上次有没有释放掉。因此就干脆用之前就判断原来的有没有释放掉来避免内存泄露。
说白了就是一种编程习惯,就像不管变量是不是常量都写成if(常量==变量)这样本回答被提问者采纳 参考技术C 内存不释放会.在短的运行时间不长的程序中不会造成很大的影响.但是在服务器中.长时间申请却不释放的内存会一直被分配.而在下一次调用函数时又会重新申请.这样长期积累下来.程序所使用的内存会慢慢累积.服务器内存资源会被消耗干净...
用完便释放内存.这是一个好的C语言程序员所必备的习惯...
以上是关于在C语言进行编程中,为啥要释放旧内存?的主要内容,如果未能解决你的问题,请参考以下文章
C语言中已经有了malloc和free,为啥还需要new和delete?