【发布时间】:2018-07-15 07:27:47
【问题描述】:
我刚刚开始在 C 中使用 UDP 套接字,我有一个与内存管理有关的问题。通常示例显示以下内容
struct addrinfo *result; //to store results
struct addrinfo hints; //to indicate information we want
:
:
:
if( (s = getaddrinfo(hostname, NULL, &hints, &result)) != 0){
fprintf(stderr, "getaddrinfo: %s\n",gai_strerror(s));
exit(1);
}
:
:
:
//free the addrinfo struct
freeaddrinfo(result);
我还看到了在 for 循环中使用的附加本地 addrinfo 结构的引入,以循环通过 result 以提取特定条目...类似这样
struct addrinfo *entry; //to store a result from linked list
:
:
:
for (entry = result; entry != NULL; entry = entry->ai_next)
{
:
:
:
}
我的问题是为什么 result 是唯一传递给 freeaddrinfo 而不是 hints 或 entry 的结构?换句话说,我从未见过有人打电话给freeaddrinfo(hints)。
另外一件事,我应该为addrinfo 形式的结构预分配内存还是初始化结构?如果是这样,我该怎么做?
【问题讨论】:
-
只是略过...是因为
getaddrinfo动态分配内存? -
如果是这种情况,我是否应该在上面的示例中预先分配内存/初始化
entry?为什么不传递给freeaddrinfo? -
在 cmets 部分很难回答您的问题。我要回复一个答案
-
这个问题和UDP完全没有关系,去掉标签。
标签: c sockets getaddrinfo