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