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