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

比如:
void function()
{
int *p = new int[100000];
}

int main()
{
for(int i=0; i<100000; i++)
function();
return 0;
}

先来进行分析一下:
fucntion函数里的
int *p = new int[100000];
做的事情
1、申请了一片内存int[100000]
2、申请了了一个指针变量 *p。同时p指向这片内存。

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

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

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

当然你main函数一退出,所有的内存就会都回收了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-25
首先要清楚堆内存和栈内存的区别
1.new 和 malloc开辟的是堆内存,生命周期由程序员管理,在子函数中开辟的内存,如果不手动的释放的话,会到程序结束后,才被系统回收。
2.普通的变量声明,在内存中是栈内存,函数结束之后,生命周期也就结束了。
第2个回答  2012-10-25
肯定会的.

new出的内存必须要用delete释放.
相似回答