因为好久没使用过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];