3

这只是一个一般性问题,但例如在 Windows 上,如果我创建一个指向要hostent使用的结构的指针,gethostbyname()我是否必须释放该指针的内存,或者它是否为我处理。我的假设是,由于我没有特别要求malloc这不是我的工作。任何人都可以为我澄清这一点吗?

谢谢

4

2 回答 2

5

根据msdn

由 gethostbyaddr 和 gethostbyname 函数返回的 hostent 结构的内存由 Winsock DLL 从线程本地存储内部分配。无论在线程上调用多少次 gethostbyaddr 或 gethostbyname 函数,都只分配和使用一个 hostent 结构。如果要在同一线程上对 gethostbyaddr 或 gethostbyname 函数进行其他调用,则必须将返回的 hostent 结构复制到应用程序缓冲区。否则,返回值将被同一线程上的后续 gethostbyaddr 或 gethostbyname 调用覆盖。当线程退出时,分配给返回的 hostent 结构的内部内存由 Winsock DLL 释放。

因此,唯一需要释放它的是将其内容复制到分配的内存中

于 2013-02-20T19:41:44.670 回答
0

在这种情况下,gethostbyname您不必担心释放存储空间。

通常,返回指针的函数应该记录调用者对指针的责任。您可能需要释放它,将其传递给另一个函数,或者在这种情况下不必做任何事情。

作为strdup反例,您应该调用free.

于 2013-02-20T19:45:15.283 回答