野指针
//概念:野指针就是指针指向的位置是不可知的(随机的,不正确的
//,没有明确限制的,空间还属于操作系统而不属于程序的)
//野指针成因:
//1.指针未初始化
#include <stdio.h>
int main() {
int* p;//局部变量指针未初始化,默认为随机值
//此时p指向的空间不明确,为野指针
*p = 20;
return 0;
}
//2.指针越界访问
#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;
}
//3.指针的空间释放
int* test()
{
int a = 10;//a为局部变量,当超出了a的作用于\域,a会被销毁
return &a;
}
int main() {
int* p = test();//函数返回一个指针
//但是函数调用结束后,局部变量a会被销毁,现在p就变成了野指针
return 0;
}
//How.如何规避野指针
//1.指针初始化
//2.小心指针越界
//3.指针指向空间释放即放置NULL
//4.避免返回局部变量的地址
//5.指针使用之前检查其有效性 如if(p!=NULL)