gpt4 book ai didi

c - free() 是在所有深度还是仅在最高级别释放内存?

转载 作者:太空宇宙 更新时间:2023-11-04 06:04:03 26 4
gpt4 key购买 nike

假设我有一个这样定义的结构:

struct myStruct{
data* anotherStruct;
}

假设我在堆上为myStruct 类型的结构分配内存。指向此结构的指针称为 ptr。然后调用 free(ptr)。这会释放只为 myStruct 分配的内存,还是释放为 myStructanotherStruct 分配的内存?

如果它只释放为 myStruct 分配的内存,这是否会导致内存泄漏,因为没有指向 anotherStruct 的指针并且永远无法释放?

最佳答案

它只释放分配给该地址的内存。即:是的最高级别。

Does this free the memory allocated just for myStruct, or does it free the memory allocated for myStruct and anotherStruct?

它只释放分配给 myStruct 的内存。

If it frees only the memory allocated for myStruct, does this lead to a memory leak because there is no pointer to anotherStruct and that can never be freed?

如果您没有指向 anotherStruct 的指针,那么是的,它会泄漏内存。通常的策略是按照分配顺序的相反顺序释放内存。

例如:在您的情况下,您首先分配了 myStruct,然后分配了 anotherStruct,因此您应该以完全相反的顺序释放,即:释放 anotherStruct 首先是 myStruct

关于c - free() 是在所有深度还是仅在最高级别释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13756831/

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