C++中空指针和野指针的区别

本文探讨了空指针和野指针的概念,它们的区别,以及为何访问这些未初始化或非法内存空间会导致运行时错误。重点介绍了如何正确初始化指针和避免内存访问问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

空指针:

1.概念:指向内存中起始编号为0的空间的指针变量

注:空指针指向的内存是不可以访问的

int *p = NULL; 
*p = 100;     //空指针p解引用会导致运行时程序出错,原因就是
	          // 访问空指针p的操作是非法的 

       上述代码段中定义了一个指针p并将其指向内存中编号为0的一片地址空间,也就意味着指针p为空指针。那么访问其指向内存中的数据的操作就是非法的,原因在于0 ~ 255之间的内存编号是系统占用的,因此不可以访问。上述解引用的操作在编译时是没有问题的,但是在运行时会出错。

2.用途:初始化指针变量 (当我们定义的一个指针变量暂时不知道要指向哪一片内存空间时,可以先把它指向内存编号为0的空间)

野指针:

1.概念:指针变量指向非法的内存空间

 实例如下:

//指针变量p指向内存地址编号为0x1111的空间 
  int *p = (int*)0x1111;
 //访问野指针报错
  cout<<*p<<endl; 

       上述代码中指针变量p指向了内存中地址编号为0x1111的空间,看似没有什么问题,但是这一块地址空间我们并没有申请,相当于让指针变量p随便的指向了内存中的一片空间,这片空间中存的是哪个变量我们一概不知,所以没有权限去访问它,这块地址对我们来说属于非法的空间,所以在访问野指针时程序会出出错。

总结:空指针和野指针都不是我们申请的空间,因此不要去访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值