gpt4 book ai didi

c - getaddrinfo addrinfo 结果在堆栈或堆中

转载 作者:太空狗 更新时间:2023-10-29 16:04:12 24 4
gpt4 key购买 nike

至少我有点困惑。getaddrinfo() 调用 'updates' 指向 addrinfo 结构的指针,当我要在同一范围(该函数)中使用 addrinfo 时一切都很好,但是如果我将结构复制到另一个结构(通过分配它)会发生什么。

请帮助我了解正在进行的基础知识(不寻求替代方法的建议)。

如果我错了请纠正我:a) getaddrinfo() 需要一个指向 addrinfo 的结构指针。b) getaddrinfo 在当前函数范围内创建一个 addrinfo 结构并更新 a) 中所需的指针

现在我真正的问题是:我想将该地址信息存储在其他地方。使用对其他指针的赋值不会进行深拷贝,并且在函数之后所有指针都变为无效?

最好举一个极其简化的例子:

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 似乎不起作用,因为问题仍然存在:原始结构在函数作用域结束后被销毁。

任何人都可以在这里给我更多的见解(请解释什么是在哪里创建的,在哪里销毁的,欢迎堆放所有信息)

最佳答案

the original struct get destroyed after the function scope ends

不,结构的指针 被破坏了。其余数据仍在堆中。如果您在完成结果时不调用 freeaddrinfo(),这将是内存泄漏。

i would like to store that addrinfo somewhere else

既然数据还存在,就随意复制指针;不需要深拷贝。从你的例子:

void GetAddrInfo(struct addrinfo **update)  /* pointer to pointer */
{
struct addrinfo *res;
getaddrinfo(xx,xx,xx,&res);
*update=res; /* save the pointer to the struct */
}

您只需调用此函数:

struct addrinfo *mycopy;
GetAddrInfo(&mycopy);

关于c - getaddrinfo addrinfo 结果在堆栈或堆中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5423766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com