在gethostbyname_r后不管塞给它的hostent,是否会有内存泄漏问题?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

在gethostbyname_r后不管塞给它的hostent,是否会有内存泄漏问题?

2016-06-16 15:34:19 2280 1
int gethostbyname_r(const char *name,
        struct hostent *ret, char *buf, size_t buflen,
        struct hostent **result, int *h_errnop);
为了避开非线程安全的gethostbyname,想用这货,用起来类似这样:

int host2addr(const char *host, struct in_addr *addr) {
    struct hostent he, *result;
    int herr, ret, bufsz = 512;
    char *buff = NULL;
    do {
        char *new_buff = (char *)realloc(buff, bufsz);
        if (new_buff == NULL) {
            free(buff);
            return ENOMEM;
        }   
        buff = new_buff;
        ret = gethostbyname_r(host, &he, buff, bufsz, &result, &herr);
        bufsz *= 2;
    } while (ret == ERANGE);
    if (ret == 0 && result != NULL) 
        *addr = *(struct in_addr *)he.h_addr;
    else if (result != &he) 
        ret = herr;
    free(buff);
    return ret;
}
基本上跟GNU官方文档里的例子一致(GNU的还少了个free的样子)。

但是对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 */
}
#define h_addr h_addr_list[0] /* for backward compatibility */

这里面有h_name,h_aliases,h_addr_list ... 我又翻看了下eglibc-2.15的gethostbyname的源码,逻辑基本上跟我上面这段一样。但是,这些东西没释放的话,真的没问题吗?

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:41:03

    You should print out the values of the pointers in that struct to find out the answer to your question. You'll discover that they all point to data inside the buffer you allocated.

    So a single free is all you need to free up all the memory.

    But this also means that you must not free that allocation until you've finished using or copying whatever data you're interested in.

    0 0
相关问答

33

回答

Win Server 2003-2016 加密勒索事件必打补丁合集

妙正灰 2017-05-15 10:44:38 280379浏览量 回答数 33

38

回答

安全组详解,新手必看教程

我的中国 2017-11-30 15:23:46 259827浏览量 回答数 38

294

回答

Linux Bash严重漏洞修复紧急通知(已全部给出最终修复方案)

qilu 2014-09-25 13:26:50 434569浏览量 回答数 294

23

回答

【云服务器分享】网站访问速度快才是硬道理

dreamdoo 2012-10-15 10:15:02 85362浏览量 回答数 23

39

回答

【云服务器分享】简述云服务器对比VPS

dreamdoo 2012-10-08 16:24:18 120095浏览量 回答数 39

131

回答

Windows系统漏洞通知(请及时修复)

qilu 2014-11-12 14:33:42 94591浏览量 回答数 131

8

回答

mail.aliyun.com邮箱android手机客户端设置方法

jack_yang 2013-04-24 09:01:34 122547浏览量 回答数 8

78

回答

【2013.9.5修正版图文】新手如何使用阿里云(linux)服务器建站(搬站)

姑苏公子 2013-04-11 00:39:13 107993浏览量 回答数 78

13

回答

游戏云精彩帖汇总

nono20011908 2014-08-22 11:00:12 203964浏览量 回答数 13

37

回答

【云服务器教程征集令】这个六一阿里云邀您来吐槽!

fanyue88888 2012-06-01 18:55:41 113979浏览量 回答数 37
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载