在自定义函数中动态申请的内存需要释放吗?若需要那么对该空间赋值后,函数返回值也为该值,怎么释放该内存

#include<iostream>usingnamespacestd;intFn1();intmain(){inta=Fn1();cout<<"Thevaleofais... #include<iostream>
using namespace std;
int Fn1();
int main()
{
int a=Fn1();
cout<<"The vale of a is:"<<a<<endl;
return 0;
}
int Fn1()
{
int * p=new int(15);
return * p;
}
展开
 我来答
muwys
2011-04-09 · 超过23用户采纳过TA的回答
知道答主
回答量:70
采纳率:0%
帮助的人:66.5万
展开全部
1. 就算没有free(),main()结束后也是会自动释放malloc()的内存的,这里监控者是操作系统,设计严谨的操作系统会登记每一块给每一个应用程序分配的内存,这使得它能够在应用程序本身失控的情况下仍然做到有效地回收内存。你可以试一下在TaskManager里强行结束你的程序,这样显然是没有执行程序自身的free()操作的,但内存并没有发生泄漏。
2. free()的用处在于实时回收内存。如果你的程序很简单,那么你不写free()也没关系,在你的程序结束之前你不会用掉很多内存,不会降低系统性能;而你的程序结束之后,操作系统会替你完成这个工作。但你开始开发大型程序之后就会发现,不写free()的后果是很严重的。很可能你在程序中要重复10k次分配10M的内存,如果每次使用完内存后都用free()释放,你的程序只需要占用10M内存就能运行;但如果你不用free(),那么你的程序结束之前就会吃掉100G的内存。这其中当然包括绝大部分的虚拟内存,而由于虚拟内存的操作是要读写磁盘,因此极大地影响系统的性能。你的系统很可能因此而崩溃。
3. 任何时候都为每一个malloc()写一个对应的free()是一个良好的编程习惯。这不但体现在处理大程序时的必要性上,更体现在程序的优良的风格和健壮性上。毕竟只有你自己的程序知道你为哪些操作分配了哪些内存以及什么时候不再需要这些内存。因此,这些内存当然最好由你自己的程序来回收。
szlon
2011-04-09 · TA获得超过762个赞
知道小有建树答主
回答量:353
采纳率:66%
帮助的人:218万
展开全部
你这样就没法释放了,它的效果与
int * p = new int;
p = NULL;
的效果一样,都是不规范的操作。动态申请的内存,在释放前都必须记住它的内存地址,所以如果真要在函数内动态申请一个变量且返回它,那么要返回的必须是它的指针。如果一定要返回值本身,那么堆变量在函数内就必须释放。
int fun()
{
int * p = new int(15);
int R = *p; //如果返回一个值,就可以用一个普通变量来暂存这个值。
delete p;
return R;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式