1、变量未初始化:
0xCCCCCCCC - 栈内存示初始化
0xCDCDCDCD - 堆内存未初始化
0xFEEEFEEE - 堆内存已经被释放、其他异常
2、死循环
for/while死循环
消息触发的函数调用上的死循环:和服务器交互的消息触发的、Windows窗口消息触发的
3、内存越界
全局内存越界
栈内存越界
堆内存越界
4、内存泄漏
malloc后没有free
new后没有delete
5、空指针与野指针
空指针(指针变量值为0)
野指针:指针指向的内存已经释放,还去访问、同一段堆内存释放了两次
6、内存访问违例
读访问违例:
禁止读64KB内存区
用户态的代码不能访问内核态的内存
读已经释放的内存
写访问违例:
禁止写64KB内存区
向已经释放的内存写数据
向不相关内存写数据
用户态的代码禁止向内核态内存写数据
7、栈内存不能使用delete/free去释放,栈内存会自动释放
8、线程栈溢出
函数递归用层次过深-减少递归尝试
函数局部变量占用内存过大-使用堆内存
switch-case语句中case分支过多-拆分到函数中
多个函数之间的死循环调用-掐断死循环调用
9、函数调用约定不一致导致的栈不平衡
_cdecl C 调用
_stdcall 标准调用
_fastcall 快速调用
10、库与库之间不匹配
底层库的API头文件没发布,上层用的是老的头文件
底层库的API头文件发布了,但底层库没编译通过
11、new操作失败的原因
申请的内存过大,进程中没有这么大的内存了
用户态的内存达到了上限,申请不到内存了
进程中的内存碎片过多
发生堆内存越界,导致堆内存被破坏,导致new操作产生异常
12、堆内存被破坏,导致程序“胡乱”崩溃
13、执行new操作时产生的异常
内存不足,导致new时抛出异常
堆内存被破坏,导致new时发生异常
14、执行delete操作时产生异常
同一段内存被delete两次,第一次崩溃
堆内存被破坏,导致delete时发生异常
15、GDI对象泄漏
长时间泄漏会接近或达到Windows单位进程的GDI总数上限
16、对类对象进行memset操作引发异常
类对象中有虚函数表指针
类对象中有维护内部内存结构的内存
结构体成员中包含类对象
17、程序招聘异常,将接下来的代码都跳过去了
该执行的代码没执行,导致代码逻辑出异常
18、注入库注入到进程中,导致进程异常
输入法模块注入-卡死或崩溃等
安全软件的模块注入-内存泄漏等
VPN软件的注入-崩溃等
19、函数调用覆盖了系统API调用时设置的lasterror值
20、格式化符与参数不一致
格式化符与对应参数的类型不一致
压到栈上的数据与格式化符不对应
21、软件在不同系统中运行可能表现不一样,要在多个系统中做兼容测试