【C语言】如何规避野指针|指针的未初始化
🗡 如何规避野指针
指针的初始化,不光是指针也要初始化,其它的任何类型都需要初始化。
小心指针越界。
指针指向空间释放即使置NULL。
指针使用之前检查有效性。
示例代码如下 ↓
在上述代码当中我们把指针变量p赋值给了空指针NULL,但是这里我们又把p进行解引用操作改变成了20,就相当于我们访问了NULL的地址。实际上NULL相当于是0,如果我们要访问0的地址的话它是不属于我们用户当中的,并没有分配给我们用户,所以当我们把20数字放进去的话是不能放进去的属于是非法访问了!
运行结果如下↓
0x002A1002 处有未经处理的异常(在 ConsoleApplication1.exe 中): 0xC0000005: 写入位置 0x00000000 时发生访问冲突。
💣 指针的未初始化
如下代码所示↓
p 是一个局部的指针变量,局部变量不初始化的话,默认是为随机值的。而随机的值放在指针变量 p 里面,就会以为这里面上放的是一个随机值。而随机的值放在指针变量 p 里面上,p 就会以为这是一个随机值的地址。
解引用 *p,那么我就会当 p 里面是一块地址。然后进行访问这块空间,因为 p 里面的这个地址是随机的值,这个时候就是通过这块地址在内存中由那个地址中指向的一块空间。所以,那个地址指向空间可能不是你的。那么这个时候就会造成非法访问内存。
以上讲解,所以才会把这里的 指针变量p 称之为野指针。
以上指针变量的初始化√
指针常见错误。
引用未初始化的指针变量。
试图引用未初始化的指针变量是初学者最容易犯的错误。未初始化的指针变量就是"野"指针,它指向的是无效的地址。
有些书上说:"如果指针变量不初始化,那么它可能指向内存中的任何一个存储单元,这样就会很危险。如果正好指向存储着重要数据的内存单元,而且又不小心向这个内存单元中写入了数据,把原来的重要数据给覆盖了,这样就会导致系统崩溃",这种说法是不正确的!如果真是这样的话就是编译器的一个严重的BUG(o゚v゚)ノ
- 所以,指针虽好但你也得会用。不然你的BUG就会满天飞。
- 点赞
- 收藏
- 关注作者
评论(0)