概念:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
野指针成因
1、指针未初始化
#include <stdio.h>
int main()
{
int* p; //局部变量指针未初始化,默认为随机值(无访问权限)
*p = 10; //非法操作
return 0;
}
2、指针越界访问
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
int* p = arr;
int i = 0;
for (i = 0; i <= 10; i++) // i = 10时越界
{
*p = i;
p++;
}
return 0;
}
//当指针指向的范围超过数组arr的范围时,p就是野指针
3、指针指向的空间释放
变量 a 在 test() 函数作用域内被创建,出 test() 函数即被销毁(内存被释放),故回到 main 函数将无权对其进行访问。
动态内存部分再补充
如何规避野指针
1、指针初始化
当不知道当前指针应该初始化为什么地址时,直接初始化为 NULL
int* p = NULL;
2、小心指针越界
注意:C语言本身不会检查数据的越界
3、指针指向空间释放,及时置NULL
4、指针使用之前检查有效性
int* p = NULL;
// 检查:
if(p != NULL)
*p = 10;