(c语言)野指针

#include //野指针
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;
}

你可能感兴趣的:(c语言,算法,数据结构)