至少我有点困惑。getaddrinfo() 调用“更新”指向 addrinfo 结构的指针,当我要在同一范围(该函数)中使用 addrinfo 时,一切都很好,但是如果我将结构复制到另一个结构(通过分配它)会发生什么。
请帮助我了解正在进行的基础知识(不寻求替代方法的建议)。
如果我错了,请纠正我:a) getaddrinfo() 需要一个指向 addrinfo 的 struct-pointer 的指针。b) getaddrinfo 在当前函数范围内创建一个 addrinfo 结构并更新 a) 中所需的指针
现在我真正的问题是:我想将该 addrinfo 存储在其他地方。使用分配给另一个指针不会进行深度复制,并且在函数之后所有指针都变得无效?
最好举一个极其简化的例子:
void GetAddrInfo(struct addrinfo *update)
{
struct addrinfo *res;
getaddrinfo(xx,xx,xx,&res);
//is this save? After this 'scope' ends all pointed fields are invalid?
//this doesn't copy the linked list ai_next.
*update=*res;
}
直接在 getaddrinfo 上使用 &update 似乎不起作用,因为问题仍然存在:原始结构在函数范围结束后被销毁。
任何人都可以在这里给我更多的见解(请解释什么在哪里创建和在哪里销毁,堆栈,堆所有信息都是受欢迎的)