函数
<cstdlib>

free

void free (void* ptr);
释放内存块
一个之前通过调用 malloccallocrealloc 分配的内存块被释放,使其可供后续分配使用。

如果 ptr 不指向上述函数分配的内存块,则会导致未定义行为

如果 ptr 是一个空指针,该函数不执行任何操作。

请注意,此函数不会改变 ptr 本身的值,因此它仍然指向同一(现在无效的)位置。

参数

ptr
指向之前通过 malloccallocrealloc 分配的内存块的指针。

返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
/* free example */
#include <stdlib.h>     /* malloc, calloc, realloc, free */

int main ()
{
  int * buffer1, * buffer2, * buffer3;
  buffer1 = (int*) malloc (100*sizeof(int));
  buffer2 = (int*) calloc (100,sizeof(int));
  buffer3 = (int*) realloc (buffer2,500*sizeof(int));
  free (buffer1);
  free (buffer3);
  return 0;
}

此程序没有输出。它只是演示了使用 C stdlib 函数分配和释放动态内存的一些方法。

数据竞争

只有 ptr 引用的存储被修改。调用不访问任何其他存储位置。
如果该函数释放的存储单元被分配函数(如 callocmalloc)重新使用,则函数会同步进行,以便在下一次分配之前完全完成释放。

异常 (C++)

无异常保证:此函数从不抛出异常。

如果 ptr 不指向之前通过 malloccallocrealloc 分配的内存块,也不是空指针,则会导致未定义行为

另见