请教:C++中,在【子函数】中new申请的内存用完不删,会导致内存泄露吗?

比如:voidfunction(){int*p=newint[100000];}intmain(){for(inti=0;i<100000;i++)function();... 比如:
void function()
{
int *p = new int[100000];
}

int main()
{
for(int i=0; i<100000; i++)
function();
return 0;
}
展开
 我来答
chinazhsj
2012-10-25 · TA获得超过391个赞
知道小有建树答主
回答量:96
采纳率:0%
帮助的人:141万
展开全部
先来进行分析一下:
fucntion函数里的
int *p = new int[100000];
做的事情
1、申请了一片内存int[100000]
2、申请了了一个指针变量 *p。同时p指向这片内存。

在子函数结束以后,会做的事情
1、销毁指针变量*p
注意:只是销售了指针变量,并不会自动的回收int[100000]这片内存
new出的内存必须要用delete才会回收

结果就造成了这片内存 没有人知道在哪了,因为指向它的指针*p已经被销毁了。
(当然了,操作系统是知道的。但是它认为你程序中还在使用这片内存,因为你没有delete掉)

这样你程序一直开着的话,就会一直占用着这些内存,但是实际上你却没有使用。

当然你main函数一退出,所有的内存就会都回收了。
好吃的人Bp
2012-10-25 · TA获得超过224个赞
知道小有建树答主
回答量:95
采纳率:0%
帮助的人:132万
展开全部
首先要清楚堆内存和栈内存的区别
1.new 和 malloc开辟的是堆内存,生命周期由程序员管理,在子函数中开辟的内存,如果不手动的释放的话,会到程序结束后,才被系统回收。
2.普通的变量声明,在内存中是栈内存,函数结束之后,生命周期也就结束了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
binglink
2012-10-25 · TA获得超过1101个赞
知道小有建树答主
回答量:639
采纳率:0%
帮助的人:463万
展开全部
肯定会的.

new出的内存必须要用delete释放.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式