C语言free():释放堆内存
free() 是 C语言的一个标准库函数,定义在
free() 函数用于释放之前通过 malloc()、calloc() 或 realloc() 函数分配的动态内存,函数的原型如下:
使用 free() 函数时,有以下几点是需要特别指出的:
因此用 free() 成功释放内存之后,应避免再次访问该内存块,将指针手动置为 NULL 是非常稳妥的方法。
【实例】以下是一个使用 malloc() 分配内存,并使用 free() 释放内存的 C语言代码示例。
<stdlib.h>
头文件中。free() 函数用于释放之前通过 malloc()、calloc() 或 realloc() 函数分配的动态内存,函数的原型如下:
void free(void* ptr);
参数
ptr:指向先前由 malloc()、calloc() 或 realloc() 分配的内存块。返回值
free() 没有返回值。使用 free() 函数时,有以下几点是需要特别指出的:
- 如果 ptr==NULL,则 free() 函数不执行任何操作。
- 释放内存后,指针 ptr 本身仍指向原来的内存空间,不会自动变为 NULL,如果在释放后继续使用该指针,可能会导致未定义的行为。
- 尝试用 free() 释放同一块内存多次也会导致未定义的行为。
因此用 free() 成功释放内存之后,应避免再次访问该内存块,将指针手动置为 NULL 是非常稳妥的方法。
【实例】以下是一个使用 malloc() 分配内存,并使用 free() 释放内存的 C语言代码示例。
#include <stdlib.h> #include <stdio.h> int main() { int *arr; int n = 5; // 使用 malloc 分配内存 arr = (int*) malloc(n * sizeof(int)); if (arr == NULL) { fprintf(stderr, "Memory allocation failed!\n"); return 1; } // 初始化并打印数组 for (int i = 0; i < n; i++) { arr[i] = i * i; printf("%d ", arr[i]); } printf("\n"); // 释放分配的内存 free(arr); // 设置指针为 NULL,以防止悬挂指针 arr = NULL; return 0; }再次强调,释放内存后将指针置为 NULL 是一种良好的做法,可以帮助防止悬挂指针,尤其是在更复杂的程序中。