c - 当 getaddrinfo() 返回非零值时,是否分配了 struct addrinfo **res?

标签 c getaddrinfo

我在嵌入式应用程序中遇到一些内存泄漏问题,在查看代码时,我发现当 getaddrinfo() 返回非-零:

s = getaddrinfo(hostname, port, &hints, &result);
if (s != 0) {
  log_error();
} else {
  // do stuff
  freeaddrinfo(result);
}

这会导致内存泄漏吗?我试图查看手册页,但没有明确说明。

最佳答案

规范并没有说明如果失败则不分配 result,因此符合规范的实现似乎可以这样做。

为什么不无条件释放它?

result = 0;
s = getaddrinfo(hostname, port, &hints, &result);
if (s) {
    // log error
} else {
    // success
}
if (result) {
    freeaddrinfo(result);
}

理想情况下,您可以在不检查 result 是否为 NULL 的情况下调用 freeaddrinfo(result),但尽管标准暗示这是可以的,但我不会这样做指望它。

关于c - 当 getaddrinfo() 返回非零值时,是否分配了 struct addrinfo **res?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12035407/

相关文章:

c++ - 我如何解析 H264 文件和帧

c - 使用 AF_UNSPEC 时,getaddrinfo() 仅返回 ipv6

c - 如何修复找不到 `getaddrinfo` 定义的问题?

c - 复杂数据类型的内存分配

c - 内存分配中的函数式编程案例

c - 将 UART 数据重定向到 pcie 端口

c - 如何停止我的 tcp echo 服务器以正确的方式工作?

c++ - Boost.Asio 解析器的结果不同

c - IPv6地址转域名

c++ - Linux c++ : getaddrinfo failed with EAI_AGAIN, curl 无法解析主机