Grace's Dev Site
write关于我
闭坑指南 · C#内存

内存泄漏与 double free

忘记 free 或重复 free,都会导致严重问题。

内存泄漏与 double free

内存泄漏

分配后丢失唯一指针,永远无法 free。长期运行的服务、循环里 malloc 不释放,会导致 RSS 持续增长 直至 OOM。

工具:valgrind --leak-check=full、ASan。

double free

同一块堆内存 free 两次,堆元数据损坏,可能立刻崩溃或留下安全隐患。

规则

  • 每个 malloc/calloc/realloc 对应最多一次 free
  • 复杂所有权用「谁创建谁释放」文档化
  • C++ 用 RAII;C 可用简单 arena 分配器减少碎片 free

在线运行 C

GCC (Piston)