C语言的野指针
一、野指针
野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
二、野指针的成因
1.未初始化
2.指针越界
当指针范围超出所指变量的空间范围是他就是野指针
int main() {
int arr[10] = { 0 };
int* p = arr;//这里就相当于取的是&arr[0]的地址
int i = 0;
for (i = 0; i <= 10; i++) {//这里的i<=9,当他等于10时就发生了越界
//当指针范围超出数组arr的范围是他就是野指针
*(p++) = i;//后置++先*p 再++
}
return 0;
}
3.指针指向的空间释放
三、如何规避野指针
1.指针初始化
①:明确指针应该初始化谁的地址,就直接初始化
②:不明确初始化谁的时候就先初始化为NULL
int main() {
int a = 0;
int* p = &a;//有明确的初始化地址直接初始化就行
int* pa = NULL;//没有明确的就先初始化为null
return 0;
}
#include <stdio.h>
int main()
{
int *p = NULL;
//....
int a = 10;
p = &a;
if(p != NULL)
{
*p = 20;
}
return 0;
}
2.小心指针越界
3.指针指向空间释放,及时置NULL
4.避免返回局部变量的地址
5. 指针使用之前检查有效性