野指针是什么?
野指针就是未初始化的指针,然后系统会随机一个垃圾值地址,地址可能不可用。
野指针的危害:容易造成段错误,即内存泄漏。
避免野指针的方法
养成良好的编程习惯
1.当指针没有指向时把它置为空(NULL)
置为空并不是为了解决野指针,只是为了让编程人员在检查错误时可以轻易发现有一个指针没有初始化,继而解决问题。单纯的置为空并没有什么意义。
*a[i] = NULL;// 开始这样写,然后再删除掉NULL为它分配内存空间,每个都如此,如果后面出现错误,可以很轻易的看出是否有NULL残留。
2.像指针指向的内存空间赋值时检查指针是否分配了内存空间,若无则用malloc分配内存空间。
int *a[3];
int i;
for(i = 0; i < 3; i++)
{
a[i] = (int *)malloc(sizeof(int));
}
其中的int*为强制类型转换,因为malloc的返回值为void*,不能确定类型,所以赋值时要做类型转换。需要转换为什么类型,就在括号里添加,malloc后面的括号里是需要分配的空间大小,这里的空间大小就是一个整形需要的空间。
3.检查malloc分配内存空间是否分配成功,若未分配,则发出提醒并退出程序。
if(a[i] == NULL)
{
printf("malloc error!\n") //发出错误提醒
exit(1); // 退出程序
}
4.使用memset()函数清空空间
memset(ptr,0,sizeof(char));
5.使用完之后要使用函数free()释放内存空间
for(i = 0; i < 3; i++)
{
free(a[i]);
}
6.清理痕迹:ptr = NULL;
for(i = 0; i < 3; i++)
{
printf("%d",*a[i]);// 输出结果
free(a[i]); // 逐个释放内存空间
a[i] = NULL;//逐个清理痕迹
}