C 内存问题排查清单

整理 C 语言内存越界、泄漏、悬空指针和未初始化访问的排查思路。

常见现象

C 内存问题经常表现得很绕:崩溃点不一定是出错点,今天能复现的问题明天可能消失,打开日志后问题也可能变化。

常见类型包括:

  • 数组或缓冲区越界
  • 使用已经释放的指针
  • 重复释放
  • 未初始化读取
  • 资源泄漏

先缩小范围

不要一开始就盯着崩溃现场。先确认最近改动、输入数据规模、线程数量、编译优化级别和是否只在特定平台出现。

如果问题能稳定复现,优先构造最小复现用例。

检查边界

内存越界通常和长度计算有关。重点检查:

  • 缓冲区大小是否包含结尾 \0
  • memcpy 长度是否来自可信来源
  • 循环边界是否使用 < 而不是误用 <=
  • 结构体长度和协议字段是否一致

检查生命周期

悬空指针来自对象生命周期结束后继续访问。释放后可以把指针置为 NULL,但这只能减少部分误用,不能替代清晰的所有权设计。

小结

排查内存问题要有耐心,也要有方法。先稳定复现,再缩小范围,最后回到边界、生命周期和错误路径。

使用 Hugo 构建
主题 StackJimmy 设计