本文主要是介绍子函数中为主调函数分配内存(转载),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
int* fun()
{
int *k=new int(10);
return k;
}
int main(int argc, char* argv[])
{
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仍然有效,其内存空间没有被释放。
这篇关于子函数中为主调函数分配内存(转载)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!