我正在尝试在项目nodogsplash中添加一个额外的功能。
struct addrlist_t {
struct in_addr h_addr;
struct addrlist_t *next;
} *addrhead = NULL, *cur = NULL;
我在x86_64工作,sizeof(struct addrlist_t)
返回8个字节,我想这里应该是16个字节。
奇怪的是&cur->h_addr
和&cur->next
的指针是相同的。
然后我在其他程序中检查struct addrlist_t
,它运行正常。
gdb说: 尝试解析出现在结构类型
内部的可变大小的类型任何人都可以给我一些帮助。
我检查gcc -E
7812 struct hostent *he;
7813 struct addrlist_t {
7814 struct in_addr h_addr_list[0];
7815 struct addrlist_t *next;
7816 } *addrhead = ((void *)0), *cur = ((void *)0);
7817 struct addrlist_t **ppre = &addrhead;
答案 0 :(得分:1)
我发现了错误。
我使用的gethostbyname
包括#include <netdb.h>
:
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_addr
是错误定义的。