【问题标题】:Freeing pointers释放指针
【发布时间】:2013-02-20 19:39:37
【问题描述】:

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

谢谢

【问题讨论】:

  • 请出示代码;我不明白您所说的“创建指向主机结构的指针”是什么意思。

标签: c pointers malloc


【解决方案1】:

根据msdn

gethostbyaddr 返回的 hostent 结构的内存和 gethostbyname 函数由 Winsock DLL 在内部分配 从线程本地存储。只有一个宿主结构 分配和使用,无论 gethostbyaddr 或 在线程上调用 gethostbyname 函数。返回的主持人 如果有额外的调用,必须将结构复制到应用程序缓冲区 将对 gethostbyaddr 或 gethostbyname 函数进行 相同的线程。否则,返回值将被覆盖 随后在同一线程上调用 gethostbyaddr 或 gethostbyname。 为返回的 hostent 结构分配的内部内存是 线程退出时由 Winsock DLL 释放。

所以你唯一需要释放它的时候是将它的内容复制到你分配的内存中

【讨论】:

  • 此外,由于内存不是通过调用malloc 或等效方法分配的,您不得调用free
【解决方案2】:

对于gethostbyname,您不必担心释放存储空间。

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

strdup为例,你应该调用free

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 2014-10-09
    • 2016-05-23
    相关资源
    最近更新 更多