在C语言进行编程中,为啥要释放旧内存?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C语言进行编程中,为啥要释放旧内存?相关的知识,希望对你有一定的参考价值。

hstring *sub
先声明了一个指针,我看别人的程序,为什么接下来就把这个指针的内存给释放了(if(sub->ch) free(sub->ch); /*释放旧空间*/),之后再使用malloc函数重新给它分配内存,为什么要这样做呢?不是多此一举吗?

我们老师说的是C++ 没有回收动态申请内存的机制。需要主动释放。JAVA等高级语言有这种机制。刚查了下貌似C++确实没有。
即是说C/C++ 都需要主动释放动态申请的内存。

试着解释下为什么要主动释放动态申请的内存:
1.动态申请的内存,存储在堆中,编译器不会自己回收,回收的意义:通俗讲就是告诉编译器,这片内存可以使用。
如果不被回收,这片内存就永远都不会被重新利用。也就是内存泄露。
例如 int *a=(int *)malloc (sizeof(int)*4);
2.现在只有a这个指针指向这片动态申请的内存,再没有别的路径可以找到这片内存空间了。如果在释放a所指向的内存空间之前就改变了a的指向,那么可知,这片内存,将不可能再被找到了。那么这片内存就不会被释放,也就是上面说到的内存泄露。
参考技术A 这样做是为了避免内存泄露,虽然你可能有好几个G的内存,虽然一次可能只泄露几个字节,多循环几趟总会把你内存用完的。这样写程序是一种良好的编程习惯。

就像,当你衣服脏了的时候,应该换一套干净的,而旧的衣服会拿去洗。
参考技术B 如果这个变量再很多地方要用到谁都不能保证自己记得上次有没有释放掉。因此就干脆用之前就判断原来的有没有释放掉来避免内存泄露。

说白了就是一种编程习惯,就像不管变量是不是常量都写成if(常量==变量)这样本回答被提问者采纳
参考技术C 内存不释放会.在短的运行时间不长的程序中不会造成很大的影响.但是在服务器中.长时间申请却不释放的内存会一直被分配.而在下一次调用函数时又会重新申请.这样长期积累下来.程序所使用的内存会慢慢累积.服务器内存资源会被消耗干净...

用完便释放内存.这是一个好的C语言程序员所必备的习惯...

以上是关于在C语言进行编程中,为啥要释放旧内存?的主要内容,如果未能解决你的问题,请参考以下文章

用c语言写的程序在电脑中所占用的内存系统会不会自动清理

C语言中已经有了malloc和free,为啥还需要new和delete?

C语言中free函数的用法

C语言 调用函数完后释放内存吗?

C语言中 内存消亡 指向她的指针就一定消亡或成了空指针为啥是错的啊

为啥 io类的资源,在使用完后,需要进行释放