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'。
我不明白吗?提前谢谢......
答案 0 :(得分:2)
向我们展示您的完整代码,特别是maintree结构。看来你需要释放maintree变量:
free(maintree);
但是,释放内存意味着您保留的内存块将再次可用于O.S。这并不意味着你实际上设置了那段内存tu NULL。编辑:@MattMcNabb“通常情况下,内存不会发布到操作系统,只能用于同一进程的进一步分配。(这当然取决于很多事情)”
您可能正在打印一段不属于您的程序的内存,但数据尚未更改。
中的这两项重要事项如果ptr没有指向使用上述函数分配的内存块,则会导致未定义的行为。
如果ptr是空指针,则该函数不执行任何操作。