释放指针

问题描述:

这只是一个普遍的问题,但例如在Windows上,如果我创建一个指向hostent结构的指针,以便与gethostbyname()一起使用,我必须处理该指针的内存还是为我处理。我是在假设,因为我没有特别呼吁malloc它,这不是我的工作。任何人都可以为我澄清这一点?释放指针

谢谢

+1

请显示验证码;我不明白你的意思是“创建一个指向hostent结构的指针”。 – zwol 2013-02-20 19:41:12

根据MSDN

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

所以,你需要释放它唯一的一次是,如果你要复制的内容给你分配

+5

此外,由于内存没有通过调用'malloc'或等价物来分配,所以你*不能*调用'free'。 – 2013-02-20 20:02:19

gethostbyname的情况下,内存,你不必担心释放的存储空间。

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

strdup作为反例,您应该拨打free