free

解除分配或释放内存块。

语法

void free(
   void *memblock
);

参数

memblock
要释放的以前分配的内存块。

注解

free 函数释放以前通过调用 callocmallocrealloc 分配的内存块 (memblock)。 已释放的字节数等于分配块时(对于 realloc 则为重新分配)请求的字节数。 如果 memblockNULL,会忽略指针并立即返回 free。 尝试释放无效指针(指向并非由 callocmallocrealloc 分配的内存块的指针)可能会影响后续分配请求,并导致错误。

如果在释放内存时发生错误,则根据操作系统中关于错误性质的信息设置 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