调试bug遇到了野指针,无语凝噎,记录
【嵌入式】让人又爱又恨的"指针"
1.我到底是个啥?
1.1【解释一下】
回顾一下, 什么是指针?指针在内存中实际上是一个无符号整数(unsigned int),但是它的值被赋予特殊的解释:表示变量或函数的地址。所以才被形象地称为"指针",就好像指向谁家似的。
1.2【谨慎使用】
在使用指针前, 都必须先让它指向有意义的, 并且允许由程序使用的实体------数据和代码
2.毒舌"野指针"
野指针就像"肉里的刺, 酱里的蛆" 一般:一个野指针就足以毁掉整个系统, 而且极其隐蔽, 很难通过症状来找出是哪里存在野指针,
某个指针变量的值因为某种原因,指向了非法的范围,使其"枪口" 乱指
- 程序逻辑错误
- 数组越界
- 堆栈溢出
- 指针没有合理的初始化
- 对缓存处理不当
- 多任务环境中的紊乱条件
以上操作都有可能制造出野指针。若使用野指针去读取或修改内存, 则被读取或修改的位置是不可预料的。
使用野指针去 读取内存------------读回来的都是乱掉的数据
使用野指针去 修改内存------------破坏未知用途的数据
这常常导致系统发生莫名其妙的功能紊乱, 严重时会使系统毫无征兆,没有理由地失控、死机。