您的位置:首页 > 科技 > 能源 > 野指针的概念 如果规避野指针

野指针的概念 如果规避野指针

2024/10/5 13:48:09 来源:https://blog.csdn.net/weixin_55341642/article/details/140218510  浏览:    关键词:野指针的概念 如果规避野指针

目录

野指针的概念

有关野指针的代码

如何规避野指针 


野指针的概念

野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)


有关野指针的代码

指针未初始化: 

#include<stdio.h>
int main()
{int* p;*p = 20;printf("%d\n", *p);return 0;
}

局部指针变量未初始化,默认为随机值,且程序会报错


指针越界访问: 

#include<stdio.h>
int main()
{int arr[10] = { 0 };int* pa = &arr;for (int i = 0; i <= sizeof(arr) / sizeof(arr[0]); i++){//当指针指向的范围超出数组arr的范围时,pa就是野指针*(pa + i) = i;}return 0;
}

数组的长度为10,那么数组的下标为0~9,但用指针变量pa来操作数组时超出了数组的范围,这时的pa就是野指针,且程序会报错,直接终止运行


指针指向的空间提前释放: 

int* test()
{int a = 100;return &a;
}
#include<stdio.h>
int main()
{int* p = test();printf("%d\n", *p);return 0;
}

int类型的变量a的空间是进入test()函数创建,出test()函数时销毁(还给操作系统)

但是在销毁前将a的地址返回给同类型的指针变量p中,p此时存放的就是a的地址

但a已经被销毁了,所以再使用p访问a的空间时就会存在非法访问,此时的p就是野指针


如何规避野指针 

1.指针初始化:

能明确知道指针该初始化为谁的地址时,就直接初始化

不知道初始化为什么值时,就赋值为NULL(空指针)

2.小心指针越界 

3.指针指向的空间释放后,及时置空(NULL)

4.避免返回局部变量的地址 

5.指针使用之前检查有效性 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com