比如:
void function()
{
int *p = new int[100000];
}
int main()
{
for(int i=0; i<100000; i++)
function();
return 0;
}
请教:C++中,在【子函数】中new申请的内存用完不删,会导致内存泄露吗?
答案:3 悬赏:0
解决时间 2021-03-02 10:44
- 提问者网友:很好的背叛
- 2021-03-02 06:42
最佳答案
- 二级知识专家网友:野心和家
- 2021-03-02 07:33
先来进行分析一下:
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楼网友:随心随缘不随便
- 2021-03-02 09:15
肯定会的.
new出的内存必须要用delete释放.
- 2楼网友:湫止没有不同
- 2021-03-02 08:42
你好!
首先要清楚堆内存和栈内存的区别
1.new 和 malloc开辟的是堆内存,生命周期由程序员管理,在子函数中开辟的内存,如果不手动的释放的话,会到程序结束后,才被系统回收。
2.普通的变量声明,在内存中是栈内存,函数结束之后,生命周期也就结束了。
我的回答你还满意吗~~
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |