释放指针
这只是一个普遍的问题,但例如在Windows上,如果我创建一个指向hostent
结构的指针,以便与gethostbyname()
一起使用,我必须处理该指针的内存还是为我处理。我是在假设,因为我没有特别呼吁malloc
它,这不是我的工作。任何人都可以为我澄清这一点?释放指针
谢谢
根据MSDN
由gethostbyaddr和 的gethostbyname函数返回的hostent结构的内存由DLL的Winsock从 线程本地存储内部分配。无论在线程上调用gethostbyaddr或012thgethostbyname函数多少次,只分配和使用单个hostent结构为 。如果要对同一线程的gethostbyaddr或gethostbyname函数执行其他调用 ,则必须将返回的hostent 结构复制到应用程序缓冲区。否则,返回值将被 后续的gethostbyaddr或gethostbyname调用覆盖在同一个线程上。 当线程退出时,为返回的hostent结构分配的内部内存是由Winsock DLL发布的 。
所以,你需要释放它唯一的一次是,如果你要复制的内容给你分配
此外,由于内存没有通过调用'malloc'或等价物来分配,所以你*不能*调用'free'。 – 2013-02-20 20:02:19
在gethostbyname
的情况下,内存,你不必担心释放的存储空间。
通常,返回指针的函数应记录调用者对指针的责任。您可能需要释放它,将它传递给另一个函数,或者在这种情况下不必做任何事情。
以strdup
作为反例,您应该拨打free
。
请显示验证码;我不明白你的意思是“创建一个指向hostent结构的指针”。 – zwol 2013-02-20 19:41:12