单片机编程中的野指针以及空指针的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011123091/article/details/81606198

什么是野指针?

就是指向内存地址不确定的指针,从“野”字可以理解。

什么情况下出现野指针?

我们知道,没有初始化的全局变量和static修饰的局部变量都会被编译器默认初始化为0,所以这些指针变量的地址是确定的0,其实也是NULL,所以他们不是野指针。未赋值的局部指针变量的值是随机分配的,为野指针,例如

//错误做法
void test()
{
    char * p;//此时的p就是野指针
    *p=2;    //由于指针位置不知道,这样直接用,可能访问了不该访问的地址,在单片机中可能产生//hardfault错误

}

//正确的做法
void test()
{
    char a=0;
    char * p=&a;     //给指针赋值一个确定的地址,然后才能使用指针
    *p=2;    
}

第二种出现野指针的情况

char *p=0;
p=(char *)malloc(50*sizeo(char));
free(p);

//p=NULL;;

//如果没有调用p=NULL,那么p指向的内存已经释放了,不确定了,如果在使用可能产生不确定的后果

所以对于指针一句话,使用的指针一定是知道指向哪里的指针

什么是空指针,以及空指针的作用?

空指针比野指针要好一点,顾名思义,空指针的指向很明确,为地址0。所以不会出现非法访问的情况。但是可以直接使用空指针去访问一个存储单元吗,答案肯定是不行的,看下例

//错误做法
void test()
{
    char * p=0;
    *p=1;     //单片机可能产生hardfault错误,思考为什么?
}

//正确做法
void test()
{
    char a=0;
    char *p=&a;
    *p=1;
}

因为空指针只是指针的指向明确,但是0地址不是一个可用的地址。

猜你喜欢

转载自blog.csdn.net/u011123091/article/details/81606198