C 语言 malloc/free
内容简介
malloc 和 free 用于在 C 语言中手动管理堆内存。它们适合处理运行时才知道大小的数据,但也容易带来内存泄漏、越界访问和悬挂指针。
用法
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p = malloc(sizeof(int));
if (p == NULL) {
return 1;
}
*p = 10;
printf("%d\n", *p);
free(p);
p = NULL;
return 0;
}申请数组:
int count = 10;
int *arr = malloc(sizeof(int) * count);
if (arr == NULL) {
return 1;
}
for (int i = 0; i < count; i++) {
arr[i] = i;
}
free(arr);
arr = NULL;最佳代码实践
- 使用
sizeof(*p)或sizeof(int) * count明确申请字节数。 malloc后立刻检查是否为NULL。malloc和free必须配对,谁申请谁释放。- 释放后把指针置为
NULL,减少重复释放和悬挂指针风险。 - C++ 中优先用
new/delete、容器或智能指针,不要混用 C 和 C++ 的内存管理方式。
错误用法
int *p = malloc(10); // 错误倾向:10 是字节数,不是 10 个 intint *p = malloc(sizeof(int));
*p = 10; // 错误:没有检查 malloc 是否失败int *p = malloc(sizeof(int));
free(p);
free(p); // 错误:重复释放int *p = malloc(sizeof(int));
delete p; // 错误:malloc 申请的内存不能用 delete 释放注意事项
malloc只分配内存,不会初始化内容;需要清零可用calloc或memset。realloc可能移动内存位置,使用时要用临时指针接收返回值。- C 语言标准头文件是
<stdlib.h>,不是<malloc.h>。