说一说为什么gethostbyname用完后不用释放内存。

因为好久没使用过C/C++的缘故,对释放内存有点麻木了。今天刚好看到某本书有个调用gethostbyname的例子。该函数返回一个hostent结构的指针,该结构声明如下。 
struct  hostent {
      char    *h_name;      /* official name of host */
      char    **h_aliases;    /* alias list */
      int     h_addrtype;     /* host address type */
      int     h_length;      /* length of address */
      char    **h_addr_list;  /* list of addresses from name server */
     };
大家可以很清楚的看到这个机构里有一个字符串指针和两个字符串指针的指针(应该是指向一个字符串数组)。可能是因为惯性思维,我猜想gethostbyname这个函数里帮字符串分配了内存,但猛然一想,不对!那用户不是要帮不是自己分配内存的函数释放吗?明显是不可能的。难道这些指针指向的都是静态的数组?马上上网找源码。一看源码,果然这个函数返回的是一个静态结构的地址,而这个结构里的指针指向的就是静态的字符数组和字符串数组。就向下面这样。
#define MAXALIASES 35
#define MAXADDRS 35

static char *h_addr_ptrs[MAXADDRS + 1];

static struct hostent host;
static char *host_aliases[MAXALIASES];
static char hostbuf[8*1024];

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值