C语言内存泄漏 #

一、什么是内存泄漏 #

1.1 定义 #

分配的内存没有被释放,导致内存无法再次使用。

1.2 常见原因 #

  • 忘记free
  • 指针丢失
  • 异常路径未释放

二、内存泄漏示例 #

2.1 忘记释放 #

c
void func() {
    int* p = (int*)malloc(sizeof(int) * 100);
}

2.2 指针丢失 #

c
int* p = (int*)malloc(sizeof(int));
p = NULL;

2.3 重复分配 #

c
int* p = (int*)malloc(sizeof(int));
p = (int*)malloc(sizeof(int));

三、预防措施 #

3.1 及时释放 #

c
int* p = (int*)malloc(sizeof(int));
if (p != NULL) {
    free(p);
    p = NULL;
}

3.2 使用后置NULL #

c
free(p);
p = NULL;

3.3 检查返回值 #

c
int* p = (int*)malloc(sizeof(int));
if (p == NULL) {
    return -1;
}

四、检测工具 #

  • Valgrind
  • AddressSanitizer
  • Electric Fence

五、总结 #

预防措施 说明
及时释放 用完即free
置NULL 防止野指针
检查返回值 防止空指针

下一步,让我们学习内存安全!

最后更新:2026-03-26