【发布时间】:2011-07-22 09:06:54
【问题描述】:
至少我有点困惑。 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 似乎不起作用,因为问题仍然存在:原始结构在函数范围结束后被销毁。
任何人都可以在这里给我更多的见解(请解释什么在哪里创建和在哪里销毁,堆栈,堆所有信息都是受欢迎的)
【问题讨论】:
标签: c networking struct heap-memory stack-memory