野指针

本文深入探讨了野指针的概念及其成因,包括未初始化的指针及释放内存后未清空指针的情况,并提供了预防野指针的有效代码示例。

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

野指针

野指针的概念:

“野指针”不是NULL指针,是未初始化或未清零的指针,他指向的内存地址不是程序员想要的。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。野指针的成因主要有两种:

 

形成野指针的原因:

1.指针创建后没有初始化

解决方法是初始化为NULL或者指向合法内存。

2.指针在使用free()delete()函数释放指向的内存时,但没有释放指针

当程序再一次调用该指针后,该野指针会乱指地址。但有些内存时受保护并且不可读写的,严重时会导致程序崩溃。解决方法是释放内存后,也将指针设为NULL

3.指针创建和操作不再同一个作用域中

 

防止野指针代码:

定义整型指针a,动态申请内存b[2],整型变量aa,指针a指向内存aa,之后输出ab的地址和指向内存值。

代码:

 1 #include<iostream>

  2 using namespace std;

  3  main()

  4 {

  5     int *a;

  6     int *b=new int[2];//申请内存

  7     int aa=10;

  8     a=&aa;

  9     *b=2;

 10     cout<<a<<"  "<<*a<<endl;

 11     cout<<b<<"  "<<*b<<endl;

 12     delete[] b;//释放内存

 13     if(b != NULL)

 14         b=NULL;//释放指针

 15 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值