gpt4 book ai didi

c - C 中的 free() 函数对我不起作用

转载 作者:行者123 更新时间:2023-11-30 19:53:05 26 4
gpt4 key购买 nike

我一直在尝试使用 free() 释放通过 malloc() 分配的内存。

它释放了一些结构,但保留了一些结构,并且它们仍然与其子结构相关联。它也永远不会释放二叉树的根(gRootPtr)

我正在使用 Xcode 来查找二叉树使用的内存是否已被释放,并使用 if 语句。

我用来释放内存的代码:

void FreeMemory(InfoDefiner *InfoCarrier)
{
if ((*InfoCarrier) != NULL) {
FreeMemory((&(*InfoCarrier)->left));
FreeMemory((&(*InfoCarrier)->right));
free((*InfoCarrier));
}
}

我用来查看内存是否已被释放的代码。

if (gRootPtr != NULL) {
return 1;
}
else{
return 0;
}

最佳答案

首先,free 不会改变指针本身。

void *x = malloc(1);
free(x);
assert(x != NULL); // x will NOT return to NULL

如果您希望指针返回 NULL,您必须自己执行此操作。

其次,无法保证释放后指针指向的内存会发生什么:

int *x = malloc(sizeof(int));
*x = 42;
free(x);
// The vlaue of *x is undefined; it may be 42, it may be 0,
// it may crash if you touch it, it may do something even worse!

请注意,这意味着您无法实际测试free() 是否有效。严格来说,完全不执行任何操作来实现 free() 是合法的(当然,如果是这种情况,您最终会耗尽内存)。

关于c - C 中的 free() 函数对我不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7774443/

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