野指针

野指针形成原因:

1:未初始化

  我们知道一个指针变量在创建的时候并不是NULL,它的缺省值是随机的,也就是说它可以乱指一通,所以在创建指针时应该初始化,要么将其设置为NULL,要么将其指向一块合法的内存

2:指针释放后未置空

  指针指向的对象主动释放(free,delete)后未及时置空,指针释放只是释放该段内存,指针本身并没有释放,此时指针指向的内存就是垃圾内存,所以释放后应该马上将指针置空

3:作用域后使用指针

  不要返回栈内的指针或者引用,栈内存在离开函数或者作用域的时候会被释放。例子如下:

int main()
{
	int *p=NULL;
	{
		int tem=10;
		p=&tem;
		cout<<"address of p:"<<p<<endl;
		cout<<"p="<<*p<<endl;
	}/**/
	int b=100;
	cout<<"address of b:"<<&b<<endl;
	cout<<"address of p:"<<p<<endl;
	cout<<"p="<<*p<<endl;
	return 0;
}

结果如下:

address of p:0x7ffffd37846c
p=10
address of b:0x7ffffd37846c
address of p:0x7ffffd37846c
p=100

分析:p在作用域内指向的是tem(值10),但是tem在离开作用域后释放了,此时p变为野指针。之后b的栈内存地址就是原来tem被释放的地址,所以p指向的内存值变为100。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值