这只是一个一般性问题,但例如在 Windows 上,如果我创建一个指向要hostent
使用的结构的指针,gethostbyname()
我是否必须释放该指针的内存,或者它是否为我处理。我的假设是,由于我没有特别要求malloc
这不是我的工作。任何人都可以为我澄清这一点吗?
谢谢
根据msdn
由 gethostbyaddr 和 gethostbyname 函数返回的 hostent 结构的内存由 Winsock DLL 从线程本地存储内部分配。无论在线程上调用多少次 gethostbyaddr 或 gethostbyname 函数,都只分配和使用一个 hostent 结构。如果要在同一线程上对 gethostbyaddr 或 gethostbyname 函数进行其他调用,则必须将返回的 hostent 结构复制到应用程序缓冲区。否则,返回值将被同一线程上的后续 gethostbyaddr 或 gethostbyname 调用覆盖。当线程退出时,分配给返回的 hostent 结构的内部内存由 Winsock DLL 释放。
因此,唯一需要释放它的是将其内容复制到分配的内存中
在这种情况下,gethostbyname
您不必担心释放存储空间。
通常,返回指针的函数应该记录调用者对指针的责任。您可能需要释放它,将其传递给另一个函数,或者在这种情况下不必做任何事情。
作为strdup
反例,您应该调用free
.