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

Pie*_*ter 4 c malloc free memory-leaks

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

下面是我的调试器在它被释放之后的屏幕截图,seCurrent->student->year显然不是这种情况.year被分配使用malloc.

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

小智 12

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


Ste*_*sop 7

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


tva*_*son 5

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