我正在尝试释放我用malloc
分配的内存,但根据Eclipse的调试器,free
命令似乎无法正常工作。这怎么可能?
下面是我的调试器的屏幕截图,据说它可以释放seCurrent->student->year
,显然并非如此。 year
是使用malloc
分配的。{/ p>
答案 0 :(得分:12)
free()通常不会更改程序中的任何值 - 它只是调整C运行时堆。这意味着保留刚刚释放的内存中的值。但是,尝试从代码中访问它们会导致未定义的行为。
答案 1 :(得分:7)
是什么让你认为它没有释放它?释放内存意味着此后从程序访问它是未定义的行为,并且下次调用malloc时可以重用内存。它不承诺覆盖存储在您释放的内存中的数据,或者阻止调试器读取未分配的内存。
答案 2 :(得分:5)
Free会将分配的空间返回给堆,以供后续malloc重用,但它不会更改以前引用该内存的任何指针的值。在你的情况下,还没有其他mallocs被执行,因此刚刚释放的内存仍然与调用free之前的内存相同。为了让您的代码知道不再有与指针相关的任何数据,您可能需要在释放与其关联的内存后将其设置为null
。
答案 3 :(得分:0)
当你malloc()
一些内存时,它只是在内存中搜索一些空闲空间,并且现在使用它来跟踪它。它没有初始化它或其他什么。
当你调用free()
时,它所做的就是从已用内存块列表中清除此内存块。同样,它不会修改内容。