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

时间:2014-10-15 23:38:11

标签: c malloc free

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。我的实验很成功,除了一件事:free(mainTrie)。

当我在释放'之后添加了printf("%c",mainTrie [2] .alphabet)在内存空间中,输出仍然给了我相同的字母,该字母存储在mainTrie [2] .alphabet中,来自方法' test'。

我不明白吗?提前谢谢......

1 个答案:

答案 0 :(得分:2)

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

free(maintree);

但是,释放内存意味着您保留的内存块将再次可用于O.S。这并不意味着你实际上设置了那段内存tu NULL。编辑:@MattMcNabb“通常情况下,内存不会发布到操作系统,只能用于同一进程的进一步分配。(这当然取决于很多事情)”

您可能正在打印一段不属于您的程序的内存,但数据尚未更改。

请注意documentation

中的这两项重要事项
  1. 先前通过调用malloc,calloc或realloc分配的内存块被释放,使其再次可用于进一步分配。(刚刚解除分配,没有说明要更改的值)
  2. 如果ptr没有指向使用上述函数分配的内存块,则会导致未定义的行为。

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

    1. 请注意,此函数不会更改ptr本身的值,因此它仍指向相同(现在无效)的位置。(因此您可能指向您在过去,但它仍然具有相同的值,有可能,它不会一直发生。)