gpt4 book ai didi

C - free() 不会删除我的结构 malloc

转载 作者:行者123 更新时间:2023-11-30 20:14:24 29 4
gpt4 key购买 nike

int main(int argc, char **argv)
{
counter = 0;
int size = 5;
struct trie *mainTrie = malloc(size * sizeof(mainTrie));
test(mainTrie);
printf("%c", mainTrie[2].alphabet);
free(mainTrie->alphabet);
printf("%c", mainTrie[2].alphabet);
return 0;
}

测试函数只是为了看看如何使用 malloc。我的实验很成功,除了一件事:免费(mainTrie)。

当我“释放”内存空间后添加 printf("%c", mainTrie[2].alphabet) 时,输出仍然给出与方法 ' 存储在 mainTrie[2].alphabet 中的相同字母测试'。

我是不是没明白什么?提前致谢...

最佳答案

向我们展示您的完整代码,特别是 maintree 结构。看来您需要释放 maintree 变量:

free(maintree);

但是,释放内存意味着您保留的内存将再次可供操作系统使用。这并不意味着您实际上将那 block 内存设置为 NULL。编辑:@MattMcNabb“通常,内存不会释放给操作系统,只是可用于同一进程的进一步分配。(当然,这取决于很多事情)”

有可能你正在打印一段不再属于你的程序的内存,但数据还没有改变。

请注意 documentation 中的这两件重要的事情

  1. 先前通过调用 malloc、calloc 或 realloc 分配的内存块被释放,使其再次可用于进一步分配。(只是释放,没有说明任何有关更改值的信息) )

如果 ptr 没有指向用上述函数分配的内存块,则会导致未定义的行为。

如果 ptr 是空指针,则该函数不执行任何操作。

  • 请注意,此函数不会更改 ptr 本身的值,因此它仍然指向相同(现在无效)的位置。(因此您可能指向在过去,但它仍然具有相同的值,这是可能的,它不会一直发生)。
  • 关于C - free() 不会删除我的结构 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26393904/

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