可能是重复问题:
C编程:free如何知道需要释放多少内存?
我突然想到一个问题,free(myPtr)
为什么不需要长度参数呢?它是如何知道需要释放多少内存的呢?
我猜测它会追踪每个特定起始地址分配了多少内存。
可能是重复问题:
C编程:free如何知道需要释放多少内存?
我突然想到一个问题,free(myPtr)
为什么不需要长度参数呢?它是如何知道需要释放多少内存的呢?
我猜测它会追踪每个特定起始地址分配了多少内存。
free
的指针必须完全等于从malloc
返回的指针的原因之一。如果不是,C语言就会感到困惑,并无法找到正确的内存块(或其长度),并可能最终“释放”一些本不应触及的内存。(如果发生这种情况,你可能会遇到称为“堆破坏”的情况,这是非常糟糕的——从那时起,C语言可能会做出各种古怪的事情,例如尝试在现有块的中间分配一些内存并损坏其中的任何内容。)