C中的free()数据块

时间:2011-02-13 06:39:47

标签: c memory free

当在C中使用free()时,释放一个指针,释放包含的指针吗?

e.g。如果指针指向一个结构数组,每个结构都包含另一个字符串数组和一些其他字段。是否会释放指向结构数组的指针并释放所有数据,或者这些其他指针是否会被破坏,导致内存无法访问?

谢谢

2 个答案:

答案 0 :(得分:2)

free函数不知道正被释放的块中包含的数据。如果你有指向该块中其他数据的指针,则必须在释放块之前释放它们。如果你根本不释放它们,你会有内存泄漏。如果你之后释放它们,你可能会有堆损坏。

答案 1 :(得分:1)

没有。它只释放在相应的malloc / calloc调用中分配的内存。对于所有自由的人来说,包含的指针可能甚至都不是指针; free不知道传递给它的数据的结构。它只能看到原始内存地址,因此无法知道它是否包含指针。

我应该补充一点,知道你是否泄漏记忆的好方法是用valgrind memcheck tool来测试你的程序。它有一个自动检测内存泄漏的工具。