请教: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;
} 展开
void function()
{
int *p = new int[100000];
}
int main()
{
for(int i=0; i<100000; i++)
function();
return 0;
} 展开
3个回答
展开全部
先来进行分析一下:
fucntion函数里的
int *p = new int[100000];
做的事情
1、申请了一片内存int[100000]
2、申请了了一个指针变量 *p。同时p指向这片内存。
在子函数结束以后,会做的事情
1、销毁指针变量*p
注意:只是销售了指针变量,并不会自动的回收int[100000]这片内存
new出的内存必须要用delete才会回收
结果就造成了这片内存 没有人知道在哪了,因为指向它的指针*p已经被销毁了。
(当然了,操作系统是知道的。但是它认为你程序中还在使用这片内存,因为你没有delete掉)
这样你程序一直开着的话,就会一直占用着这些内存,但是实际上你却没有使用。
当然你main函数一退出,所有的内存就会都回收了。
fucntion函数里的
int *p = new int[100000];
做的事情
1、申请了一片内存int[100000]
2、申请了了一个指针变量 *p。同时p指向这片内存。
在子函数结束以后,会做的事情
1、销毁指针变量*p
注意:只是销售了指针变量,并不会自动的回收int[100000]这片内存
new出的内存必须要用delete才会回收
结果就造成了这片内存 没有人知道在哪了,因为指向它的指针*p已经被销毁了。
(当然了,操作系统是知道的。但是它认为你程序中还在使用这片内存,因为你没有delete掉)
这样你程序一直开着的话,就会一直占用着这些内存,但是实际上你却没有使用。
当然你main函数一退出,所有的内存就会都回收了。
展开全部
首先要清楚堆内存和栈内存的区别
1.new 和 malloc开辟的是堆内存,生命周期由程序员管理,在子函数中开辟的内存,如果不手动的释放的话,会到程序结束后,才被系统回收。
2.普通的变量声明,在内存中是栈内存,函数结束之后,生命周期也就结束了。
1.new 和 malloc开辟的是堆内存,生命周期由程序员管理,在子函数中开辟的内存,如果不手动的释放的话,会到程序结束后,才被系统回收。
2.普通的变量声明,在内存中是栈内存,函数结束之后,生命周期也就结束了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
肯定会的.
new出的内存必须要用delete释放.
new出的内存必须要用delete释放.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询