01
内存布局基础
栈区、堆区、全局区、代码段详解,理解指针的本质与内存地址。
内存模型指针本质
02
指针声明与初始化
野指针的成因、空指针与悬空指针的区别、指针的算术运算。
野指针算术运算
03
数组与指针的关系
数组名退化为指针、下标访问的本质、多维数组的指针操作。
数组退化多维指针
04
动态内存分配
malloc/calloc/realloc/free的正确用法、内存分配失败处理。
堆管理错误处理
05
常见越界场景(一)
数组下标越界、字符串未加结束符导致的越界。
下标越界字符串
06
常见越界场景(二)
缓冲区溢出、栈溢出、memcpy/memset长度错误。
栈溢出memcpy
07
常见越界场景(三)
结构体指针偏移错误、函数返回局部变量地址。
指针偏移局部变量
08
内存泄漏(一)
忘记free、覆盖指针导致内存泄漏、循环引用。
free遗漏循环引用
09
内存泄漏(二)
异常路径未释放、容器中指针未清理、第三方库泄漏。
异常路径第三方库
10
内存泄漏(三)
线程局部存储泄漏、全局变量泄漏、单例模式泄漏。
TLS单例
11
双重释放与释放后使用
double free、use-after-free的成因与后果。
double freeUAF
12
堆内存管理机制
ptmalloc/jemalloc/tcmalloc简介、chunk结构、bins分类。
ptmallocchunk
13
调试工具(一)
GDB调试内存问题、watchpoint、backtrace。
GDBwatchpoint
14
调试工具(二)
Valgrind memcheck原理与使用、抑制文件。
Valgrindmemcheck
15
调试工具(三)
AddressSanitizer (ASan) 编译选项与运行时报告解读。
ASan编译选项
16
调试工具(四)
LeakSanitizer、ThreadSanitizer、UBSan。
LSanTSan
17
静态分析工具
Cppcheck、Clang Static Analyzer、Coverity。
静态分析Cppcheck
18
防御性编程(一)
断言assert、边界检查封装、安全字符串函数。
assert安全字符串
19
防御性编程(二)
智能指针(C++)、RAII思想、资源管理类。
智能指针RAII
20
防御性编程(三)
内存池设计、对象池、避免碎片化。
内存池对象池
21
防御性编程(四)
编码规范(MISRA C/C++、SEI CERT)、代码审查清单。
MISRACERT
22
C++特有内存问题
new/delete与malloc/free混用、虚表指针破坏。
new/delete虚表
23
STL容器内存安全
vector扩容迭代器失效、string内部指针、map/set节点泄漏。
迭代器失效节点泄漏
24
多线程内存问题
数据竞争、锁未保护共享指针、线程局部存储泄漏。
数据竞争TLS
25
嵌入式/内核内存问题
kmalloc泄漏、DMA缓冲区溢出、栈大小限制。
kmallocDMA
26
实战案例(一)
网络服务器内存泄漏定位与修复(epoll + 内存池)。
epoll内存池
27
实战案例(二)
图像处理库缓冲区溢出漏洞分析与补丁。
缓冲区溢出补丁
28
实战案例(三)
游戏引擎中智能指针循环引用导致的内存泄漏。
循环引用智能指针
29
实战案例(四)
数据库驱动中use-after-free崩溃排查。
UAF数据库驱动
30
总结与最佳实践
内存安全checklist、持续集成中的内存检测、团队文化建设。
checklistCI