• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
gddzkw
博客园    首页    新随笔    联系   管理    订阅  订阅
野指针

随着对指针的学习,慢慢我也接触到了野指针这个问题

什么是野指针呢?

       因为指针指向的是该变量的地址,如果这个指向的地址是不可知的,随机性的,不正确的。那这个指针就是野指针。

野指针的成因:

1、指针未初始化

VS2013版本的编译器就报错了,有些编译器不会报错。但要注意指针没有初始化,那就是随机值。

 

 2、指针越界访问

编译器通过了编译,但编译出现错误。由于数组只有10元素,而循环会循环12次。因此就会造成指针的越界访问。

 

 那么为什么会出现越界访问呢?看一下代码:

 

 注:system(pause)放在return 0后面无效,不会执行。

所有创建的变量都是在栈区申请空间的,这种过程称为压栈操作。

栈区的默认使用:先使用高地址处的空间,在使用低地址处的空间。

数组是随着下标的增长,地址由低到高变化的。

 

 越界访问是非法的,当进入循环,从下标为10开始,就超出了数据的范围,继续访问将依次向高地址访问,因此就由可能访问到定义局部变量i=0这一处地址。必然就会进入死循环。

当然,除了进入死循环外,还由可能非法访问别处的地址数值。

3、指针指向的空间释放

这个一般出现在函数内。涉及到函数传参的问题,而局部变量,参数都是在栈区申请空间的,对于参数来说,它的生命周期是从进入函数到出函数。

 

参数的历程是从函数创建到函数结束,当实参传给形参的时候,形参其实是实参的一份临时拷贝。进入函数时创建变量,返回时函数空间已返回系统,返回的仅仅是地址。

如果再次访问这个已经释放了的空间的地址是非法的。

 

posted on 2021-10-08 16:20  又菜又爱玩丶  阅读(177)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3