C 释放指针

C 释放指针,c,pointers,malloc,C,Pointers,Malloc,这只是一个一般性的问题,但例如在windows上,如果我创建一个指向hostent结构的指针以与gethostbyname()一起使用,我是否必须取消分配该指针的内存,或者是否为我处理它。我的假设是,因为我没有专门打电话给malloc,所以这不是我的工作。有人能帮我澄清一下吗 谢谢根据msdn gethostbyaddr和返回的hostent结构的内存 gethostbyname函数由Winsock DLL在内部分配 从线程本地存储。只有一个主机结构是可用的 分配和使用,无论gethostbya

这只是一个一般性的问题,但例如在windows上,如果我创建一个指向
hostent
结构的指针以与
gethostbyname()
一起使用,我是否必须取消分配该指针的内存,或者是否为我处理它。我的假设是,因为我没有专门打电话给malloc,所以这不是我的工作。有人能帮我澄清一下吗

谢谢

根据msdn

gethostbyaddr和返回的hostent结构的内存 gethostbyname函数由Winsock DLL在内部分配 从线程本地存储。只有一个主机结构是可用的 分配和使用,无论gethostbyaddr或 在线程上调用gethostbyname函数。女主人回来了 如果需要其他调用,则必须将结构复制到应用程序缓冲区 将对上的gethostbyaddr或gethostbyname函数进行 同一条线。否则,返回值将被 同一线程上的后续gethostbyaddr或gethostbyname调用。 为返回的hostent结构分配的内部内存为 线程退出时由Winsock DLL释放


因此,您需要释放它的唯一时间是将其内容复制到分配的内存中。在
gethostbyname
的情况下,您不必担心释放存储空间

通常,返回指针的函数应该记录调用者对指针的责任。您可能需要释放它,将其传递给另一个函数,或者在本例中不必执行任何操作


作为反例,您应该调用
free

请显示代码;我不明白您所说的“创建指向hostent结构的指针”是什么意思。此外,由于内存不是通过调用
malloc
或等效对象分配的,因此您不能对其调用
free