C语言形成野指针的原因

一、形成野指针的原因
1.定义的指针未初始化
int main()
{
    int *p;//p在未指向a的地址之前,是野指针。
    //可以初始化为int *p = NULL;

    int a;
    *p = &a;
}
2.指针的越界访问
int main()
{
	int arr[10] = { 0 };
	int* p = arr;
	int i = 0;
	for (i = 0; i <= 12; i++)
	{
		*(p++) = i;
	}
	return 0;
}

当i=10以后,指针P所指向已经超出了数组的范围,这时的P就是野指针。

3.指针指向的空间释放
int* test()
{
	int a = 20; //临时变量,在main函数中调用完后会销毁
	return &a;
}

int main()
{
	int* p = test();
	
	printf("%d\n", *p); //此时的指针P指向的a的地址可能已经被销毁,也可能被系统赋予了新的值。
	return 0;
}
二、如何避免野指针
1、指针初始化

        如果有确切的值就给它初始化为相应的值,如果没有,则初始化为NULL

2、小心指针越界

        多注意数组这类型的。

3、指针指向空间释放,则立马将其置为空指针(NULL)
4、避免返回局部变量的地址
5、指针使用之前检查其有效性

        在使用前判断指针是否为空指针(NULL),因为空指针它不指向任何对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值