读书人

关于函数内动态分配内存的指针返回有关

发布时间: 2012-03-25 20:55:17 作者: rapoo

求助:关于函数内动态分配内存的指针返回问题
本人看了一个程序,有如下疑问,望大家详细指点,谢谢!
函数段为:
NET *rnet(FILE *f)
{
NET *net1;
net1=(NET*)malloc(sizeof(NET))
...
...
return(net1);
}
主函数为:
int main()
{
...
NET *net2=rnet(filecopy)
}

NET为结构体类型,我的疑问就是,为啥在这里还可以返回函数中创建的指针呢?在函数段里动态申请的内存,函数调用完后,不是内存被释放了,指针销毁吗?疑惑中....

[解决办法]
malloc申请的内存要自己释放,
指针确实销毁了,
但指向的地址已经返回了,
因此你还是知道分配的内存在什么地方...
[解决办法]

return(net1);
的时候是把这个指针的值,就是刚刚开辟的内的地址

函数结束只是释放了net1的内存单元,它所指向的内存并没有消耗

我们可以通过net2去释放这块内存
[解决办法]
指针本身是一个int,当然可以返回
[解决办法]
指针有个地址,指针的值是malloc分配的地址,函数返回时把malloc分配的地址返回了,指针本身实际销毁了,即net1不存在了,但malloc分配的地址因为没有free,所有还可以使用,net2指向了这块地址,所有net2也可以用,如果没有了net2指向这块地址,就会出现内存泄露。
[解决办法]
这里有几个概念:
1.内存堆和函数栈的区别
2.函数的返回值传递

1.在函数内部调用malloc,会在内存堆上分配内存,这段内存被分配出来后,除非free,不然会与进程同寿。
2.指针可以理解为一个整数,函数返回使用传值传递结果,net2被赋予了这个堆上内存块的地址值,然后你就可以很骚包的用net2指向的内存了。

第三。。很重要的。。。给分。

读书人网 >C语言

热点推荐