提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一、野指针
1.概念
野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)。
2.野指针成因
指针未初始化
#include <stdio.h>
int main()
{
int *p;//局部变量指针未初始化,默认为随机值
*p = 20;
return 0;
}
指针越界访问
#include <stdio.h>
int main()
{
int arr[10] = {0};
int *p = arr;
int i = 0;
for(i=0; i<=11; i++)
{
//当指针指向的范围超出数组arr的范围时,p就是野指针
*(p++) = i;
}
return 0;
}
指针指向的空间释放
#include <stdio.h>
int* test()
{
int a = 10;
return $a;
}
int main()
{
int*p = test();//由于test函数中a为局部变量,在函数执行时创建空间,结束后地址就会销毁,因此p指向的空间以及释放了,p就是野指针。
return 0;
}
3.规避方法
指针正确的使用示例代码如下:
#include <stdio.h>
int main()
{
int *p = NULL;//指针初始化
//....
int a = 10;
p = &a;
if(p != NULL)//指针使用之前检查有效性
{
*p = 20;
}
return 0;
}
指针初始化
小心指针越界
指针指向空间释放及时置NULL
避免返回局部变量的地址
指针使用之前检查有效性
总结
指针虽好,切勿乱用,让每一个指针都找到“归宿”!