释放指针

ran*_*eld 3 c malloc pointers

这只是一个普遍的问题,但是例如在Windows上,如果我创建一个指向要hostent与之一起使用的结构的指针,gethostbyname()我必须处理该指针的内存或是否为我处理.我的假设是因为我没有特别要求malloc它不是我的工作.谁能为我澄清一下这个?

谢谢

75i*_*ist 5

根据msdn

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

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

  • 此外,由于内存不是通过调用`malloc`或等效的来分配的,所以你*不能*在其上调用`free`. (5认同)