(c语言)野指针
#include<stdio.h> //野指针
int* test()
{
int a = 10;
return &a;
}
int main()
{
//野指针一:
int* p;
*p = 10; //非法访问内存
//p没有初始化,就意味着没有明确的指向
//一个局部变量不初始化的话,放的是随机值:0xcccccccc
//-----------------------------------------------------------------------
//野指针二:
int arr[10] = { 0 };
int* p = arr;
int i = 0;
for (i = 0; i <= 11; i++)
{
//当指针指向的范围超出数组arr的范围时,p就是野指针
*(p++) = i;
}
// -----------------------------------------------------------------------
//野指针三:
int* p = test();
printf("%d",*p);//10
//a的地址在自定义函数运行结束后,会将地址的控制权还给系统
//虽然地址的控制权还给了系统,但其中的数值在没有被覆盖之前会一直存在
//故可以通过返回的地址找到并读取其中的值
//------------------------------------------------------------------------
int* p = NULL;
//为了减少野指针的形成,暂时不用的指针定义之后可以先赋值为空
return 0;
}