当前位置: 技术问答>linux和unix
系统函数返回的指针指向的内存释放的问题
来源: 互联网 发布时间:2016-12-22
本文导语: 最近在看UNP,很多系统函数都返回的是指针,比如gethostbyname,gethostbyaddr,getaddrinfo等,而在这些函数内部又用malloc动态分配了内存,函数结束时,就把指向这部分内存的指针返回给调用者。那请问这些内存又谁来释放,...
最近在看UNP,很多系统函数都返回的是指针,比如gethostbyname,gethostbyaddr,getaddrinfo等,而在这些函数内部又用malloc动态分配了内存,函数结束时,就把指向这部分内存的指针返回给调用者。那请问这些内存又谁来释放,既然有了malloc,那就肯定要free,但是看了书上那么多代码,也没看到用户free过。于是,我自己加了free,结果就是运行时错误了。请教大牛,这到底是为什么?那些内存到底何时被free了,谢谢!
|
有可能返回指向static的指针,这样就不需要free
|
有的返回的是全局的内存空间.
要不要free, 一是看你自己有没有malloc,
如果是系统的函数,可能man一下,还可能会有对应的释放函数,而不单单让你调用free
要不要free, 一是看你自己有没有malloc,
如果是系统的函数,可能man一下,还可能会有对应的释放函数,而不单单让你调用free
|
这个问题还真没好好研究过,楼主真仔细。呵呵
|
我是这样理解的,
系统调用返回的指针,你不能free(),因为有可能Kernel还有其他地方也在引用这个指针。所以你free了,系统其他地方如果正在用,就出错了。一般kenel会维护引用计数,如果计数为0,kenel会free的,不用用户操心。
系统调用返回的指针,你不能free(),因为有可能Kernel还有其他地方也在引用这个指针。所以你free了,系统其他地方如果正在用,就出错了。一般kenel会维护引用计数,如果计数为0,kenel会free的,不用用户操心。