前言:


相信各位小伙伴在学习C语言指针的时候往往都会头痛,因为会时常遇到野指针,那么我的上篇文章已经介绍了 什么是野指针 ,那么今天我就给大家分享一下如何尽可能的避免野指针的出现,为啥是尽可能的,因为每个人都会有犯错的时候嘛,所以我们不求十全十美也不可能做到十全十美,好了废话不多说,进入主题!


避免野指针的方法:


一:指针初始化
良好的代码风格和习惯往往能使我们事半功倍,不仅有助于自己写代码时理清思路,还有助于别人更好的阅读自己的开源代码,不仅仅是指针尽量初始化,任何变量和数组小编在这里都强烈建议各位进行初始化。


那么问题来了,我们知道数组和变量可以初始化为零,那么数组如何进行初始化呢?
答:指针初始化的时候可以把指针先初始化为空指针。


#include <stdio.h>
int main()
{
int num = 0;//变量初始化
int arr[10] = {0};//数组初始化
int *pa = NULL;//指针初始化为空指针,注意这样初始化不可使用这个指针,但可以有效进行初始化
return 0;
}

二:小心指针越界!


啥叫指针越界呢?
答:指针越界是指超出了指针指向已分配空间的变量或常量的空间。
就好比你家住一楼但你二楼也要住似的,这就是非法访问内存,
会带来不可预知的错误。


#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//给数组arr分配十个元素的空间
int* pa = &arr;//创建整形指针指向arr数组的首元素
int i = 0;//创建变量i并初始化为0
for(i=0;i<=10;i++)//注意这里的判断条件是i <= 10,所以该循环会被执行11次,最终导致越界访问
{
*pa[i] = 0;//给指针指向的元素赋值为0
}
return 0;
}

所以应该避免这种情况,需要把<=改为<。


三:避免指针指向的空间为已释放的空间


什么意思呢?
就是说之前的时候这个变量存在可是当我对指针进行解引用的时候这个变量已经销毁了,不存在了。因为 它是个局部变量,下面用代码段来解释一下。


#include <stdio.h>
int* test()//定义test函数的返回类型为int*
{
int tmp = 10//创建临时变量tmp
int* pa = &tmp;//创建整形指针变量指向变量tmp
return *pa;//返回指针,注意因为这个变量是在自定义函数内创建的临时变量
//所以return返回后tmp变量自动销毁
}
int main ()
{
int ret = test();//创建变量来接收test函数的返回值
*pa = 20;//对局部变量进行解引用操作
printf("%d\n",ret);//打印变量retreturn 0;
}

四:指针使用之前检查有效性


这个很好理解,就是使用指针之前对该指针进行地址是否有效进行检查,就是说指针不能指向为开辟空间的变量和对空指针进行直接使用。


结语:好了那么关于本期的只要内容如何避免野指针出现的问题,小编就分享到这里,我会持续更新希望得到大家的关注与支持。

如何避免野指针的情况出现!相关推荐

  1. 理解C语言中的空指针和野指针

    在C语言中,指针是一个非常重要的概念,可以用于操作变量和数据结构.但是,指针也是很容易出错的地方.其中包括两种可能的错误:空指针和野指针. 空指针 空指针指代无效的地址,表示指针不指向内存中的任何一个 ...

  2. 野指针出现的三种情况

    昨天面试被问到"你了解野指针吗",我的回答是"野指针就是没有初始化的指针,这样的指针会随机指向一块内存,野指针会对系统造成破坏(造成内存泄漏)".面试官又问到, ...

  3. C语言野指针产生的情况

    在大型项目中我们对指针的应用是需要非常谨慎的,一不留神可能就会产生野指针或者造成内存泄漏. 以下情况是产生野指针的几种原因和实例. 一:指针为初始化直接使用 #include <stdio.h& ...

  4. C/C++中野指针产生的三种情况

    C/C++中野指针产生的三种情况 1.指针变量未初始化: 任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气,此时若未初始化,则产生野指针. 2.指针释放后未置空: 有时 ...

  5. Go 知识点(19)— Go 语言中的野指针

    野指针是一种指向内存位置是不可知的指针,一般是由于指针变量在声明时没有初始化所导致的.在 Go语言中,布尔类型的零值为 false,数值类型的零值为 0,字符串类型的零值为 "", ...

  6. C++两个 delete 后的问题 野指针

    最近在网上看到两个关于指针 delete 后的问题.第一种情况: 1 2 3 int* p = new int; delete p; delete p;// p为什么能delete两次,而程序运行的时 ...

  7. c语言 free参数 指针,C语言之free函数以及野指针介绍

    [FROM MSDN && 百科]原型:void free(void *ptr); #include或#include Deallocate space in memory 释放ptr ...

  8. C语言之free函数及野指针

    [FROM MSDN && 百科] 原型:  void free(void *ptr); #include<stdlib.h>或#include <malloc.h& ...

  9. 指针 是否相同_c专题之指针---野指针和空指针解析

    ----在上一篇c专题指针文章中,我们介绍了什么是指针,文章里面从普通变量进而引出指针的概念,这样对指针的理解有一定的帮助(其实最好的理解,就是要明白硬件里面的内存原理,这是理解指针最好的地方,就好比 ...

最新文章

  1. Struts2+Hibernate+Spring 整合示例
  2. SQL Server基础
  3. php用ajaxs上传图片_php+ajax实现图片文件上传功能实例
  4. 在 Mac 上多开微信,还能看到朋友撤回的信息:WeChatTweak
  5. jquery 中 fn.apply(this, arguments)是什么函数?有什么作用?能举个例子吗
  6. 剑指offer之反转链表
  7. 设计模式——工厂方法
  8. JPA Example查询
  9. tp5调用阿里云短信接口
  10. 做一个小程序需要多少钱?
  11. 信号发生器的基本知识
  12. 为什么说视频号是下一个短视频风口?
  13. M70003中型Android平板电脑亦称IPED 13价格ipad的
  14. 【系统相关】远程连接,凭据不工作
  15. 漫漫找工路——百度、移动、华为等公司应聘经历总结
  16. 为什么我的域名在某些地方不能访问,解析到127.0.0.1或者0.0.0.0?
  17. 攻防世界Web题 - unseping 总结
  18. “超限效应”和“改宗心理效应”
  19. 三种主流深度相机方案对比
  20. 《缠中说禅108课》103:学屠龙术前先学好防狼术

热门文章

  1. Waiting for changelog lock
  2. mysql 导出数据 权限_MySQL 导出数据
  3. 树莓派考勤通(软件)
  4. haoservice 定位
  5. 亿级流量网站架构核心技术【笔记】(一)
  6. react 项目问题记录
  7. 79.【Mybatis】
  8. java江湖2新手开局攻略_烟雨江湖攻略大全 新手攻略开局流程汇总[多图]
  9. 基于APSA 和 LMS 的系统识别的比较(matlab代码实现)
  10. 我的世界服务器组队系统,我的世界小游戏服务器组队指令 | 手游网游页游攻略大全...