子函数中为主调函数分配内存(转载)

int* fun()
{
int *k=new int(10);
return k;
}
int main(int argc, char* argv[])
{ 
int *i;
i=fun();
cout<<*i<<endl;
return 0;
}

这个测试程序中,在fun函数有new分配了一个整数的内存空间,并赋值为10,反回给main函数中的指针变量i。
其过程如下:
用new都是在堆中分配内存空间,如果不显示地释放这些内存空间,这些内存空间的生命周期和运用程序保持同步。所以虽然在子函数fun中定义了一个局部指针变量k,它在函数返回过后空间要被释放,但是由于它的地址已经返回到了主调函数中的变量保存,而这个地址空间在堆中分配,不会被释放,所以在主函数中仍然可用。

也即如用new分配了一地址为00EE的内存空间,把它赋给变量k,并通过k返回给主调函数中变量i。这里在函数fun中的变量k被释放了。但是内存空间(00EE)并没有释放,所以指针i仍然可以正确使用这个内存空间。

00EE -> k -> i
然后k被释放:
这时i中保存的向内存地址00EE仍然有效,其内存空间没有被释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值