野指针危害-指针未初始化发生段错误(核心已转移)

首先养成指针初始化的良好编程习惯: int *p = NULL;   严禁int *p;

一、指针指向不可访问(如内核空间)的地址,结果是触发段错误。

        对于未初始化的指针,其指向的地址是不确定的,若指向非法内存,并对非法内存的读取,其后果是不可预料的。

二、指针指向了一个可用的,无关紧要的地址空间,此时运行结果不会出现段错误。这种情况下会掩盖你的程序错误,让你以为程序没有问题,其实问题也是很严重的。

        若上述代码未出现段错误,这是因为未初始化的指针所指向的地址是随机的,若刚好指向了一个可用的、无关紧要的地址就会编译通过。这种情况可能会在将来的代码中发生一些未知性的错误,排查相当困难。

三、指针数组越界造成离奇错误。int a[3] = {1, 2, 3};数组中使用的int *p = a[3];此指针即为野指针。

        若对野指针p所指向的地址进行读写,其可能是某些非法区域或者存储其他变量值,擅自更改会影响该变量值,进而产生离奇错误。

**************************如何避免野指针**********************

1、定义指针时,同事初始化为NULL。

2、在指针使用前,将其赋值绑定给一个可用的地址空间。

3、在指针解引用之前,先去判断这个指针是否为NULL。

4、避免指针越界。

5、在一个范围内(如在if语句范围下使用该语句之外定义的指针)指针使用完后,将其赋值为NULL,不能将if下定义的变量地址用指针带出if语句,因为范围内定义的变量只能在该范围内使用,避免返回局部变量的地址。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值