释放指针

时间:2013-02-20 19:39:37

标签: c pointers malloc

这只是一个普遍的问题,但是例如在Windows上,如果我创建一个指向hostent结构的指针以与gethostbyname()一起使用,我是否必须处理该指针的内存或处理它为了我。我假设我没有专门致电malloc,这不是我的工作。谁能为我澄清这个?

谢谢

2 个答案:

答案 0 :(得分:5)

根据msdn

  

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

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

答案 1 :(得分:0)

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

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

使用strdup作为反例,您应该致电free