网络编程学习笔记(freeaddrinfo函数)

由getaddrinfo返回的存储空间,包括addrinfo结构、ai_addr结构和ai_canonname字符串,都是用malloc动态获取的。这些空间可调用 freeaddrinfo释放。其原型如下:
#include <netdb.h>
void freeaddrinfo (struct addrinfo*ai);

ai指向getaddrinfo返回的第一个addrinfo结构。在该链表中的所有结构,以及这些结构所指向的动态存储空间都被释放。假设我们调用getaddrinfo,顺着addrinfo结构链表找到所需的结构,然后只复制该addrinfo结构以保存其信息,再调用 freeaddrinfo,就会产生一个潜藏的错误。原因是addrinfo结构中的指针指向动态分配的内存。因此由我们保存的结构指向的内存在调用 freeaddrinfo后就释放,可能将作它用。只复制addrinfo结构,而不复制addrinfo结构所指向的其他结构,叫做浅拷贝或浅复制。复制addrinfo结构,同时复制addrinfo结构所指向的其他结构,称为深拷贝或深复制

你可能感兴趣的:(网络编程学习笔记(freeaddrinfo函数))