4

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

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

替代文字 http://img693.imageshack.us/img693/7840/codeo.png

4

4 回答 4

13

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

于 2010-02-21T12:50:15.247 回答
7

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

于 2010-02-21T12:51:14.730 回答
5

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

于 2010-02-21T12:57:09.283 回答
1

当你malloc()有一些内存时,它所做的只是在内存中搜索一些空闲空间,并跟踪它现在使用的情况。它不会初始化它或其他任何东西。

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

于 2010-02-21T12:58:34.233 回答