free()没有正确释放内存?

时间:2010-02-21 12:48:17

标签: c memory-leaks free malloc

我正在尝试释放我用malloc分配的内存,但根据Eclipse的调试器,free命令似乎无法正常工作。这怎么可能?

下面是我的调试器的屏幕截图,据说它可以释放seCurrent->student->year,显然并非如此。 year是使用malloc分配的。{/ p>

alt text http://img693.imageshack.us/img693/7840/codeo.png

4 个答案:

答案 0 :(得分:12)

free()通常不会更改程序中的任何值 - 它只是调整C运行时堆。这意味着保留刚刚释放的内存中的值。但是,尝试从代码中访问它们会导致未定义的行为。

答案 1 :(得分:7)

是什么让你认为它没有释放它?释放内存意味着此后从程序访问它是未定义的行为,并且下次调用malloc时可以重用内存。它不承诺覆盖存储在您释放的内存中的数据,或者阻止调试器读取未分配的内存。

答案 2 :(得分:5)

Free会将分配的空间返回给堆,以供后续malloc重用,但它不会更改以前引用该内存的任何指针的值。在你的情况下,还没有其他mallocs被执行,因此刚刚释放的内存仍然与调用free之前的内存相同。为了让您的代码知道不再有与指针相关的任何数据,您可能需要在释放与其关联的内存后将其设置为null

答案 3 :(得分:0)

当你malloc()一些内存时,它只是在内存中搜索一些空闲空间,并且现在使用它来跟踪它。它没有初始化它或其他什么。

当你调用free()时,它所做的就是从已用内存块列表中清除此内存块。同样,它不会修改内容。