free
解除分配或释放内存块。
语法
void free(
void *memblock
);
参数
memblock
要释放的以前分配的内存块。
注解
free
函数释放以前通过调用 calloc
、malloc
或 realloc
分配的内存块 (memblock
)。 已释放的字节数等于分配块时(对于 realloc
则为重新分配)请求的字节数。 如果 memblock
是 NULL
,会忽略指针并立即返回 free
。 尝试释放无效指针(指向并非由 calloc
、malloc
或 realloc
分配的内存块的指针)可能会影响后续分配请求,并导致错误。
如果在释放内存时发生错误,则根据操作系统中关于错误性质的信息设置 errno
。 有关详细信息,请参阅errno
, _doserrno
, _sys_errlist
和_sys_nerr
.
释放内存块后,_heapmin
通过合并未使用的区域并将其释放回到操作系统,将堆上的可用内存量降至最低。 未释放给操作系统的已释放内存还原到可用池,并且可用于重新分配。
当应用程序与调试版的 C 运行时库链接时,free
将解析为 _free_dbg
。 若要详细了解如何在调试过程中托管堆,请参阅 CRT 调试堆。
free
标记为 __declspec(noalias)
,这表示该函数保证不会修改全局变量。 有关详细信息,请参阅 noalias
。
若要释放使用 _malloca
分配的内存,请使用 _freea
。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
要求
函数 | 必需的标头 |
---|---|
free |
<stdlib.h> 和 <malloc.h> |
有关兼容性的详细信息,请参阅 兼容性。
示例
请参阅 malloc
的示例。
另请参阅
内存分配
_alloca
calloc
malloc
realloc
_free_dbg
_heapmin
_freea